社区讨论

求助!!

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 条回复,欢迎继续交流。

正在加载回复...