NYOJ973_天下第一

来源:互联网 发布:ipad淘宝卖家版哪个好 编辑:程序博客网 时间:2024/05/01 02:55

原题地址:点我

思路:spfa算法找环,如果存在环则说明真气可无限增加,spfa算法在我的另一篇博客上有介绍:spfa算法

#include<stdio.h>#include<string.h>#include<queue>using namespace std;queue<int>que;int m,used[510],rein[510],in[510]; double map[510][510],dis[510];bool spfa(int u){int i;que.push(u);rein[u]++;used[u]=1;dis[u]=1;while(!que.empty()){int a=que.front();que.pop();used[a]=0;for(i=1;i<=m;i++){if(map[a][i]>0 && dis[i]<dis[a]*map[a][i]){dis[i]=dis[a]*map[a][i];if(used[i]!=1){que.push(i);used[i]=1;rein[i]++;if(rein[i]>in[i])return true;}}}}return false;}int main(){int t,n,u,v,i;double x;scanf("%d",&t);while(t--){while(!que.empty()){que.pop();}memset(map,0,sizeof(map));memset(used,0,sizeof(used));memset(in,0,sizeof(in));memset(rein,0,sizeof(rein));memset(dis,0,sizeof(dis));scanf("%d%d",&m,&n);for(i=0;i<n;i++){scanf("%d%lf%d",&u,&x,&v);if(x>map[u][v])  map[u][v]=x;  in[v]++;}if(!spfa(1))printf("No\n");elseprintf("Yes\n");}return 0;}


1 0