萌 新 求 助 (P3556)
  • 板块学术版
  • 楼主Dreamweaver
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/3/23 20:03
  • 上次更新2023/11/5 01:41:52
查看原帖
萌 新 求 助 (P3556)
91956
Dreamweaver楼主2021/3/23 20:03
#include<bits/stdc++.h>
using namespace std;
#define mod 1000007
#define inf 0x3f
#define re register
#define maxn 100000
#define ll long long
int n,m,w,cnt,dist[10010][10010];
int h=1,t=1;
short q[50000010];
struct Edge
{
    int to,c,next;
}edge[10010];
int head[10010];
void add(int s,int t)
{
    edge[cnt].to=t;
    edge[cnt].next=head[s];
    head[s]=cnt++;
}
void pre()
{
    memset(head,-1,sizeof(head));
    cnt=0;
}
void sss(int s)
{
    q[1]=s;
    h=1;
    t=1;
    while(h<=t)
    {
        int x=q[h];
        h++;
        for(re int i=head[x];i!=-1;i=edge[i].next)
        {
            int j=edge[i].to;
            if(!dist[s][j])
            {
                dist[s][j]=dist[s][x]+1;
                q[++t]=j;
            }
        }
    }
}
inline int read(){
    int x=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9') {if(ch=='-')f=-1; ch=getchar();}
    while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0'; ch=getchar();}
    return x*f;
}
int main()
{
//  freopen("a.in","r",stdin);
//  freopen("a.out","w",stdout);
//  printf("%dM\n",(sizeof(dp) >> 20))
    cin>>n>>m>>w;
    pre();
    memset(dist,0,sizeof(dist));
    for(re int i=1;i<=m;++i)
    {
        int a,b;
        a=read(),b=read();
        add(a,b+n);
        add(b,a+n);     
    }
    for(re int i=1;i<=n;i++)
        sss(i);
//  cout<<dist[5][5]<<' '<<dist[5][5+n]<<endl;
    for(re int i=1;i<=w;++i)
    {
        int a,b,c;
        a=read(),b=read(),c=read();
        if(c%2==1)
        if(dist[a][b+n]&&c>=dist[a][b+n])
        {
            puts("TAK");
            continue;
        }
        if(c%2==0)
        if(dist[a][b]&&c>=dist[a][b])
        {
            puts("TAK");
            continue;
        }

        puts("NIE");
    }

    return 0;
}
2021/3/23 20:03
加载中...