小W计树
来源:互联网 发布:三星电视上不了网络 编辑:程序博客网 时间:2024/06/10 04:55
排列组合思想.
先跑一遍最短路, 再从1节点开始搜索, 假如搜到一个点的路径长度等于最短路, 则记录到达该点的路径数 + 1.
最后遍历一遍, ans *= rec[i]
输出答案即可.
关键在于想到这个排列组合的思想.
#include<cstdio>#include<cstring>#include<algorithm>#define F(x) for (L i=h[x],v=e[i].v,w=e[i].w;i;i=e[i].next,v=e[i].v,w=e[i].w) using namespace std;typedef long long L;void read(L &x) { x=0; char c=getchar(); for (;c<'0' || c>'9';c=getchar()); for (;'0'<=c && c<='9';c=getchar()) x=x*10+c-'0'; }const L Q=2147483647;const L maxn=1e3+10;const L maxm=maxn*maxn;struct edge { L v,w,next;} e[maxm];L tot=0,h[maxn];inline void add(L u,L v,L w) { e[++tot].v=v;e[tot].w=w;e[tot].next=h[u]; h[u]=tot; }L q[maxm],ql,qr,d[maxn];bool inq[maxn];void spfa(L s) { memset(inq,0,sizeof inq); memset(d,0x3f,sizeof d); ql=qr=1; q[qr]=s; d[s]=0; inq[s]=true; while (ql<=qr) { L u=q[ql++]; F(u) if (d[v]>d[u]+w) { d[v]=d[u]+w; if (!inq[v]) inq[v]=true,q[++qr]=v; } inq[u]=false; }}L sum[maxn];void check(L s) { memset(inq,0,sizeof inq); memset(sum,0,sizeof sum); ql=qr=1; q[qr]=s; d[s]=0; inq[s]=true; while (ql<=qr) { L u=q[ql++]; F(u) if (d[v]==d[u]+w) { sum[v]++; if (!inq[v]) inq[v]=true,q[++qr]=v; } }}int main() { #ifndef ONLINE_JUDGE freopen("test.in","r",stdin); #endif L n,m; read(n),read(m); for (L i=1;i<=m;++i) { L u,v,w; read(u),read(v),read(w); add(u,v,w),add(v,u,w); } spfa(1); check(1); L ans=1; for (L i=1;i<=n;++i) if (sum[i]) (ans*=sum[i])%=Q; printf("%lld\n",ans);}
0 0
- 小W计树
- 计161_Problem W: 武功秘籍
- 小W的数字
- 小W学物理
- 小W旅游railway
- 小W摆石子
- 小W走迷宫
- 【bzoj2441】 中山市选2011小W的问题 线段树
- 一个小的计算题
- 【JZOJ4823】小W学物理
- JZOJ4823. 小W学物理
- JZOJ4840 小W砍大树
- [JZOJ5165] 小W的动漫
- 【JZOJ5165】小W的动漫
- Jzoj4840 小W砍大树
- 消费类小电子----豪华型卡路里计
- hihocoder 1191 小W与网格
- 【JZOJ 4823】小W学物理
- apache服务器安装虚拟机
- 序列合并(codevs1245 最小的N个和)
- 文字排版--字体
- C#中利用委托实现多线程跨线程操作
- BZOJ 1057
- 小W计树
- TF-IDF模型
- Socket 多线程 JDBC综合编程一服务器端编程
- 检测你的手机是否连上网络
- 使用Ajaxupload.js上传文件
- java对象和json对象之间互相转换
- c高级之指针1
- Oracle-11g学习4 - grad安装2
- MySQL改变列顺序