天下第一 973 (SPFA模板求生成环 好题)
2015-09-18 22:34
351 查看
天下第一
时间限制:1000 ms | 内存限制:65535 KB难度:3描述AC_Grazy一直对江湖羡慕不已,向往着大碗吃肉大碗喝酒的豪情,但是“人在江湖漂,怎能不挨刀",”人在江湖身不由己",如果自己的武功太差,在江湖会死的很惨,但是AC_Grazy没有武功秘籍练不了绝世武功.有道是“山重水复疑无路,柳暗花明又一村”,在AC_Grazy家里面竟然藏着一本书,书名竟然叫做【超级外挂】,竟然能在各种武功之间进行转化,据说是他爷爷的爷爷的...爷爷传下来的...闲着无事便拿来看看,只看一眼便再也停不下了,只见上面写着“纵横武林打遍天下无敌手武功心法秘籍收录”.翻开第一篇一看竟然是【降龙十八掌】...心法只是一个修练武功的途径,重要的是真气的多少,于是他便想利用外挂让武功之间进行转化,来让真气无限增加,但是这个心法只能按照顺序转化,我们分别用 1号和2号来代替两种功法 当然转化会有一定的转化率f比如1 0.5 2 便是把 1的一半真气转化给2 ,为了简化问题,我们每次都从1号秘籍开始进行转化,如果其中一个秘籍转化断了,那么以后的功法就不能转换。输入输入:首先输入一个数 T(T<=20)表示T组数据然后输入两个数n(2<=n<=500)和m(1=<m<=2000)分别表示有n种秘籍,随后的m行分别输入秘籍u(n>=u>0) 转化率 f (0<f<=10)秘籍 v.(0<v<=n)输出输出:如果可以无限增加真气输出Yes否则输出No.样例输入2
3 3
1 2 2
2 2 3
3 2 1
4 3
1 2 2
3 2 4
4 2 3
样例输出
Yes
No
#include<stdio.h> #include<queue> #include<string.h> using namespace std; struct step { int b,next; double w; }body[2002]; int head[1002]; double divs[1002]; int vis[1002]; int cnt[1002]; int n; int spfa() { queue <int> q; q.push(1); vis[1]=1; divs[1]=1; cnt[1]++; while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=0; for(int i=head[u]; i!=-1; i=body[i].next) { int v=body[i].b; if(divs[u]*body[i].w>divs[v]) { divs[v]=divs[u]*body[i].w; if(!vis[v]) { vis[v]=1; q.push(v); cnt[v]++; if(cnt[v]>=n) { return 1; } } } } } return 0; } int main() { int t; scanf("%d",&t); while(t--) { memset(vis,0,sizeof(vis)); memset(cnt,0,sizeof(cnt)); memset(divs,0,sizeof(divs)); memset(body,0,sizeof(body)); memset(head,-1,sizeof(head)); int m;int z=0; scanf("%d%d",&n,&m); for(int i=0; i<m; i++) { int a,b; double f; scanf("%d%lf%d",&a,&f,&b); { body[z].b=b; body[z].w=f; body[z].next=head[a]; head[a]=z++; } } int key=spfa(); if(key) printf("Yes\n"); else printf("No\n"); } return 0; }//这个一直WA,不知为啥。
#include<stdio.h>#include<string.h>#include<algorithm>#include<queue>#define INF 0x3f3f3f3f#define MIN(a,b) a>b?b:a#define MAX(a,b) a>b?a:busing namespace std;int used[1010],vis[1010];double dis[1010];struct Edge{double val;int to,next;}edge[2010];int head[1010],edgenum;int n,m;int SPFA(int x){queue<int>q;q.push(x);dis[x]=1;vis[x]=1;used[x]++;while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;if(dis[v]<dis[u]*edge[i].val){dis[v]=dis[u]*edge[i].val;if(!vis[v]){vis[v]=1;q.push(v);used[v]++;if(used[v]>=n){return 1;}}}}}return 0;}int main(){int t;scanf("%d",&t);while(t--){memset(vis,0,sizeof(vis));memset(dis,0,sizeof(dis));memset(used,0,sizeof(used));memset(head,-1,sizeof(head));edgenum=0;scanf("%d%d",&n,&m);while(m--){int a,c;double b;scanf("%d%lf%d",&a,&b,&c);{//add(a,b,c);edge[edgenum].to=c;edge[edgenum].val=b;edge[edgenum].next=head[a];head[a]=edgenum++;}}int key=SPFA(1);if(key)printf("YES\n");elseprintf("NO\n");}return 0;}
相关文章推荐
- 设计原则理解
- 无损联接分解、还原
- 线程的生命周期
- POJ 3255 Help with Intervals (线段树区间更新)
- Tomcat中端口占用如何处理?
- 第三周 项目4-顺序表应用2
- POJ 2411 状态压缩递,覆盖方案数
- 两个应用之间传递广播的规则 Broadcast
- java汉化
- java汉化
- Edit Distance
- JavaScript高级程序设计 第五章 — 引用类型
- 一张图告诉你iPhone设备、iOS系统版本、屏幕分辨率的演变
- HDU 3794 Assign the task (时间戳dfs序线段树)
- python语言简单了解
- easyUI——datagrid的动态显示和隐藏
- 总结个关于MySQL数据库的问题
- hihoCoder-1087 Hamiltonian Cycle (记忆化搜索)
- 真实的人际关系
- Android自定义控件