玄关求条
查看原帖
玄关求条
959924
VelGutN楼主2025/7/25 22:01

听取WA声一片,求条QAQ

#include <bits/stdc++.h>
using namespace std;
const int N = 30005;

int head[N], cnt, dis[N];
bool vis[N];
int T;
int n, m;

struct node {
    int nxt, v, w;
} edge[N];

void add_edge(int u, int v, int w) {
    edge[++cnt].nxt = head[u];
    head[u] = cnt;
    edge[cnt].v = v;
    edge[cnt].w = w;
}

int sum[N];  

bool SPFA() {
    memset(dis, 0x3f, sizeof(dis));
    memset(sum, 0, sizeof(sum));
    memset(vis, 0, sizeof(vis));
    dis[1] = 0;
    vis[1] = 1;
    queue<int> q;
    q.push(1);
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        vis[u] = 0; 
        for (int i = head[u]; i; i = edge[i].nxt) {
            int v = edge[i].v;
            if (dis[v] > dis[u] + edge[i].w) {
                dis[v] = dis[u] + edge[i].w;
                sum[v] = sum[u] + 1;  
                if (sum[v] >= n) return 1;  
                if (!vis[v]) {
                    vis[v] = 1;
                    q.push(v);
                }
            }
        }
    }
    return 0;
}

int main() {
    int u, v, w;
    cin >> T;
    while (T--) {
        cin >> n >> m;
        cnt = 0;
        memset(head, 0, sizeof(head));
        for (int i = 1; i <= m; i++) {
            cin >> u >> v >> w;
            add_edge(u, v, w);
        }
        if (SPFA()) puts("Yes");
        else puts("No");
    }
    return 0;
}
2025/7/25 22:01
加载中...