WA #12 求助
查看原帖
WA #12 求助
1217960
mugglelll楼主2024/5/22 12:43

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <cmath>
#include <bitset>
#include <numeric>
#include <vector>
#include <list>
#include <string>
#include <algorithm>
#include <numeric>
#include <queue>
#include <set>
#include <map>
#include <stack>
#include <utility>
#include <unordered_map>
#include <tuple>
#define endl '\n'
#define LOG(a) cout<<a
using namespace std;
typedef long long LL;

LL t;
LL n, m;
LL cnt = 0;
// LL head[2010];
LL dist[2010];
struct edge {
    LL s, to, val, next;
}edges[3010 * 2];

void add_edge(LL s, LL to, LL val) {
    cnt++;
    edges[cnt].s = s;
    edges[cnt].to = to;
    edges[cnt].val = val;
}
int main() {
    cin>>t;
    while (t--) {
        cnt = 0;
        memset(dist, 0x3f, sizeof dist);
        cin >> n >> m;
        for (LL i = 1;i <= m;i++) {
            LL u, v, w;
            cin >> u >> v >> w;
            if (w >= 0) {
                add_edge(u, v, w);
                add_edge(v, u, w);
            } else {
                add_edge(u, v, w);
            }
        }
        for (LL i = 1;i <= n - 1;i++) {
            for (LL j = 1;j <= cnt;j++) {
                if (dist[edges[j].to] > dist[edges[j].s] + edges[j].val) {
                    dist[edges[j].to] = dist[edges[j].s] + edges[j].val;
                }
            }
        }
        for (LL j = 1;j <= cnt;j++) {
            if (dist[edges[j].to] > dist[edges[j].s] + edges[j].val) {
                cout << "YES" << endl;
                goto label1;
            }
        }
        cout<<"NO"<<endl;
    label1:;
    }
    return 0;
}

#12 输出的是YES,但是答案是NO,我看着输入的数据感觉存在负环,应该就要输出YES,感谢解答

2024/5/22 12:43
加载中...