标签:head vis int spfa tot 判负 luogu3385 maxn include
解题关键:模板保存。
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<cmath> #include<queue> #define inf 0x3f3f3f3f using namespace std; const int inf=0x3f3f3f3f; const int maxm=111110; const int maxn=20020; int head[maxn],tot,n,m; struct edge{ int to; int w; int nxt; }e[maxm]; void add_edge(int u,int v,int w){ e[tot].w=w; e[tot].to=v; e[tot].nxt=head[u]; head[u]=tot++; } bool vis[maxn]; int d[maxn]; // bool dfs_spfa(int u){ vis[u]=1; for(int i=head[u];i!=-1;i=e[i].nxt){ int v=e[i].to; if(d[v]>d[u]+e[i].w){ d[v]=d[u]+e[i].w; if(vis[v]||dfs_spfa(v)) return 1; } } vis[u]=0; return 0; } int main(){ int a,b,c,T; scanf("%d",&T); while(T--){ tot=0; memset(head,-1,sizeof head); memset(vis,0,sizeof vis); memset(d,0,sizeof d); scanf("%d%d",&n,&m); for(int i=0;i<m;i++){//注意为双向边 scanf("%d%d%d",&a,&b,&c); if(c<0) add_edge(a,b,c); else add_edge(a,b,c),add_edge(b,a,c); } bool flag=false; for(int i=1;i<=n;i++){ if(dfs_spfa(i)){ flag=true; break; } } if(flag) puts("YE5"); else puts("N0"); } return 0; }
标签:head,vis,int,spfa,tot,判负,luogu3385,maxn,include 来源: https://www.cnblogs.com/elpsycongroo/p/10353439.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。