tjut 3478

来源:互联网 发布:数控编程怎么学 编辑:程序博客网 时间:2024/06/16 20:28
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int MAXN = 100010;const int MAXM = 500010;struct Edge{    int v, next;}edge[MAXM];int n, m, s;int cnt;int first[MAXN];bool color[MAXN], vis[MAXN];void init(){    cnt = 0;    memset(vis, 0, sizeof(vis));    memset(color, 0, sizeof(color));    memset(first, -1, sizeof(first));}void read_graph(int u, int v){    edge[cnt].v = v;    edge[cnt].next = first[u], first[u] = cnt++;}int find(int u){    for(int e = first[u]; e != -1; e = edge[e].next)    {        int v = edge[e].v;        if(!vis[v])        {            vis[v] = 1;            color[v] = !color[u];            find(v);        }        else if(color[u] == color[v])    return false;    }    return true;}int main(){    int T, times = 0;    scanf("%d", &T);    while(T--)    {        init();        scanf("%d%d%d", &n, &m, &s);        while(m--)        {            int u, v;            scanf("%d%d", &u, &v);            read_graph(u, v);            read_graph(v, u);        }        printf("Case %d: ", ++times);        color[s] = 1;        vis[s] = 1;        printf(find(s)?"NO\n":"YES\n");    }    return 0;}

0 0