测试点1TLE求助
查看原帖
测试点1TLE求助
241484
Tomori_Nao_楼主2020/7/24 11:17

码风巨丑请巨佬门见谅

#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
int elast[2005],dis[2005],cnt[2005],n,m;
bool use[2005];
struct node
{
    int x,y,next;
}e[6005];
string spfa(int x)
{
	memset(dis,0x3f3f3f3f,sizeof(dis));
	memset(use,false,sizeof(use));
	memset(cnt,0,sizeof(cnt));
	queue<int> q;
    dis[x] = 0;
    q.push(x);
    use[x] = true;
    cnt[x]++;
    while(!q.empty())
    {
        int tot = q.front(),t;
        q.pop();
        use[tot] = false;
        for(int i = elast[tot];i != 0;i = e[i].next)
        {
            int u = e[i].x;
            if(dis[u] > dis[tot] + e[i].y)
            {
                dis[u] = dis[tot] + e[i].y;
                if(!use[u])
                {
                    q.push(u);
                    use[u] = true;
                    cnt[u]++;
                    if(cnt[u] == n) return "YES";
                }
            }
        }
    }
    return "NO";
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&n,&m);
        memset(elast,0,sizeof(elast));
        int cntt = 0;
        for(int i = 1;i <= m;i++)
        {
            int a,b,c;
            scanf("%d %d %d",&a,&b,&c);
            if(c >= 0)
            {
                cntt++;
                e[cntt].x = b;
                e[cntt].y = c;
                e[cntt].next = elast[a];
                elast[a] = cntt;
                cntt++;
                e[cntt].x = a;
                e[cntt].y = c;
                e[cntt].next = elast[b];
                elast[b] = cntt;
            }
            else
            {
                cntt++;
                e[cntt].x = b;
                e[cntt].y = c;
                e[cntt].next = elast[a];
                elast[a] = cntt;
            }
        }
        cout << spfa(1) << endl;
    }
    return 0;
}
2020/7/24 11:17
加载中...