社区讨论
求助!!
P3385【模板】负环参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi7cqdd1
- 此快照首次捕获于
- 2025/11/20 19:32 4 个月前
- 此快照最后确认于
- 2025/11/20 19:32 4 个月前
为何现在bellman_ford也写不对了qwq
CPP#include<bits/stdc++.h>
using namespace std;
const int maxN=5000 + 100;
struct Node
{
int from,to,value;
}edge[maxN*2+1];
int tot,n,m;
int dis[maxN+1];
int read()
{
int num=0,f=1;
char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) num=(num<<3)+(num<<1)+(ch^48),ch=getchar();
return num*f;
}
void add(int x,int y,int t)
{
tot++;
edge[tot].from=x;
edge[tot].to=y;
edge[tot].value=t;
}
bool check()
{
dis[0]=0;
for(int i=1;i<n;i++)
for(int j=1;j<=tot;j++)
if(dis[edge[j].to]>dis[edge[j].from]+edge[j].value)
dis[edge[j].to]=dis[edge[j].from]+edge[j].value;
for(int i=1;i<=tot;i++)
if(dis[edge[i].to]>dis[edge[i].from]+edge[i].value) return false;
return true;
}
void work()
{
tot=0;
memset(dis,0x3f,sizeof(dis));
n=read(),m=read();
for(int i=1;i<=n;i++) add(0,i,0);
for(int i=1;i<=m;i++)
{
int x=read(),y=read(),t=read();
add(x,y,t);
if(t>0) add(y,x,t);
}
if(!check()) printf("YE5\n");
else printf("N0\n");
}
int main()
{
//freopen("test.in","r",stdin);
int t=read();
while(t--) work();
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...