88pts,WA3 8 18 21,求调!谢谢大佬!
查看原帖
88pts,WA3 8 18 21,求调!谢谢大佬!
1279044
_Abigail_楼主2025/8/29 16:46
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,m,k;
vector<int> G[5005];
struct questions{
    int id,to;
    ll d;
};
vector<questions> qu[5005];
int dis[5005][2];
bool flag[1000005],vis[5005];
void spfa(int s)
{
    memset(dis,0x3f3f3f3f,sizeof dis);
    memset(vis,0,sizeof vis);
    queue<int> q;
    q.push(s);
    vis[s]=1;
    dis[s][0]=0;
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        vis[u]=0;
        for(int v:G[u])
        {
            bool is=false;
            if(dis[u][1]+1<dis[v][0])
            {
                dis[v][0]=dis[u][1]+1;
                is=true;
            }
            if(dis[u][0]+1<dis[v][1])
            {
                dis[v][1]=dis[u][0]+1;
                is=true;
            }
            if(is&&!vis[v])
            {
                q.push(v);
                vis[v]=1;
            }
        }
    }
}
int main()
{
    cin>>n>>m>>k;
    while(m--)
    {
        int a,b;
        cin>>a>>b;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    for(int i=1;i<=k;i++)
    {
        int s,t;
        ll d;
        cin>>s>>t>>d;
        qu[s].push_back({i,t,d});
    }
    for(int i=1;i<=n;i++)
    {
        if(!qu[i].empty()||!G[i].empty())
        {
            spfa(i);
            for(auto &q:qu[i])
            {
                int cnt=q.d%2;
                flag[q.id]=(dis[q.to][cnt]<=q.d);
            }
        }
    }
    for(int i=1;i<=k;i++)
    {
        if(flag[i])
        {
            cout<<"TAK"<<"\n";
        }else{
            cout<<"NIE"<<"\n";
        }
    }
    return 0;
}
2025/8/29 16:46
加载中...