90WA求助!!
查看原帖
90WA求助!!
512407
codejiahui楼主2023/3/18 15:03

RT,here.

#include<cstdio>
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
const int INF = 0x3f3f3f3f;
struct Node{int v,w;};
vector<Node> adj[5010];
int n,m,vis[5010],dis[5010],cnt[5010];
bool spfa()
{
    queue<int> q;
    memset(dis,0x3f,sizeof(dis));
    memset(vis,0,sizeof(vis));
    memset(cnt,0,sizeof(cnt));
    vis[0] = 1;
    dis[0] = 0;
    q.push(0);
    cnt[0]++;
    while(!q.empty())
    {
        int u = q.front();
        q.pop();
        vis[u] = 0;
        for (Node x:adj[u])
            if (dis[x.v] > dis[u] + x.w)
            {
                dis[x.v] = dis[u] + x.w;
                if (!vis[x.v])
                {
                    vis[x.v] = 1;
                    q.push(x.v);
                    if (cnt[x.v] >= n + 1) return true;
                    cnt[x.v]++;
                }
            }
    }
    return false;
}
int main()
{
    scanf("%d%d",&n,&m);
    for (int i = 1;i <= m;i++)
    {
        int id;
        int u,v,w;
        scanf("%d",&id);
        if (id == 1)
        {
            scanf("%d%d%d",&u,&v,&w);
            adj[v].push_back({u,w});
        }
        if (id == 2)
        {
            scanf("%d%d%d",&u,&v,&w);
            adj[u].push_back({v,-w});
        }
        if (id == 3)
        {
            scanf("%d%d",&u,&v);
            adj[u].push_back({v,0});
        }
    }
    for (int i = 1;i <= n;i++)
        adj[0].push_back({i,0});
    if (spfa())
        printf("No\n");
    else printf("Yes\n");
    return 0;
}
2023/3/18 15:03
加载中...