NYOJ973天下第一_最长路判环
来源:互联网 发布:网络新闻稿范文 编辑:程序博客网 时间:2024/05/01 02:40
题目链接
注意:如果可以无限增加真气输出Yes否则输出No
我直接忽略了这一点,以为只要能一直流传就可以了,只要这个图是个强连通图就行了,以为转化率是没用的数据。。。第一次是提交也不提示WC,一直提示的Runtime我也找不到哪里错了。。。
最后看了下同学的才发现我理解错题意了,学到了新知识,用spfa判环,之前只用过判断负权环
判断路环:如果某点的进队次数>该点的入度,则成环
安利一下扩展知识:点我
#include<stdio.h>#include<string.h>#include<vector>#include<queue>using namespace std;#define max(a,b) a>b?a:bvector<int>e[505];int in[505];int in_Q[505];int vis[505];double dis[505];double f[505][505];int n; bool spfa(int s){int i,v,u;queue<int>Q;Q.push(s);dis[s]=1;vis[s]=1;in_Q[s]++;while(!Q.empty()){u=Q.front();Q.pop();vis[u]=0;for(i=0;i<e[u].size();i++){v=e[u][i];if(dis[v] < dis[u] * f[u][v]) { dis[v]=dis[u]*f[u][v]; if(!vis[v]) { vis[v]=1;Q.push(v); in_Q[v]++; if(in_Q[v] > in[v]) return true; } }}}return false;}void init(){ memset(in_Q,0,sizeof(in_Q));memset(dis,0,sizeof(dis));memset(vis,0,sizeof(vis));}int main(){int T;scanf("%d",&T);while(T--){int m,i,u,v;double c;scanf("%d%d",&n,&m);for(i=0;i<=n;i++) e[i].clear(); memset(f,0,sizeof(f));memset(in,0,sizeof(in));for(i=0;i<m;i++){scanf("%d%lf%d",&u,&c,&v);e[u].push_back(v);f[u][v]=max(f[u][v],c);in[v]++;}init();if(spfa(1)) printf("Yes\n"); else printf("No\n");}return 0;}
错误理解的代码也贴上吧~(判断该图否是强连通)
#include<stdio.h>#include<string.h>#include<vector>#include<stack>using namespace std;#define min(a,b) a<b?a:bint Belong[505];int Bcnt,time;int dfn[505],low[505];int in_s[505];int size_s[505];int n,m;vector<int>e[505];stack<int>S;void init(){memset(Belong,0,sizeof(Belong));memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));memset(in_s,0,sizeof(in_s));memset(size_s,0,sizeof(size_s));Bcnt=0;time=0;}void tarjan(int u){int i,v;S.push(u);in_s[u]=1;dfn[u]=low[u]=++time;for(i=0;i<e[u].size();i++){v=e[u][i];if(!dfn[v]){tarjan(v);low[u]=min(low[u],low[v]);}else if(in_s[v]){low[u]=min(low[u],dfn[v]);}if(dfn[u]==low[u]){Bcnt++;do{v=S.top();S.pop();in_s[v]=0;Belong[v]=Bcnt;size_s[Bcnt]++;}while(v!=u);}}}int main(){int T;scanf("%d",&T);while(T--){int i,u,v;double f;scanf("%d%d",&n,&m);for(i=0;i<=n;i++) e[i].clear(); for(i=0;i<m;i++){scanf("%d%lf%d",&u,&f,&v);e[u].push_back(v);}init();for(i=1;i<=n;i++){if(!dfn[i]) tarjan(i);}if(Bcnt==1 && size_s[1]==n){printf("Yes\n");}else printf("No\n");}return 0;}
明天比赛,给自己加油~
0 0
- NYOJ973天下第一_最长路判环
- nyoj973天下第一
- nyoj973 天下第一 (spfa算法)
- nyoj973 天下第一(spfa判环)
- nyoj973天下第一spfa环路判断
- NYOJ 973 天下第一(最长路判环)
- 天下第一
- 天下第一文
- 天下第一,唯我独尊!
- NYOJ973_天下第一
- 12_最长平台
- 天下第一庄(石家庄)的八个天下第一
- [搞笑] 天下第一剑
- 天下第一的东方朔
- nyoj 973 天下第一
- 天下第一萌程序
- NYOJ 973 天下第一
- nyoj 973 天下第一
- 利用java反射实现独立模块功能
- MAC NSPopover
- redis3.0.0 集群安装详细步骤
- 图的邻接矩阵遍历
- 关于scollview嵌套recyclerview
- NYOJ973天下第一_最长路判环
- 数据源
- linux系统RTMPdump(libRTMP) 通过RTMP 发布H264数据
- java animal
- iOS打造属于自己的用户行为统计系统
- 使用Windows系统远程连接Windows server服务器
- UPC 1017 Easy Tree Query (二叉搜索树)
- 服务器路径获取
- 读写配置文件ConfigParser