Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define ull unsigned long long
- #define pb push_back
- #define mem(arr,val) memset(arr,val,sizeof(arr))
- #define mp make_pair
- #define pii pair<int,int>
- #define F first
- #define S second
- #define sz(x) (int)(x).size()
- #define nopos string::npos
- #define fr(i,a,b) for(i=a;i<=b;i++)
- #define frn(i,a,b) for(i=a;i>=b;i--)
- int t,n,m,x,k;
- vector<int> edge[100000+7];
- int level[100000+7];
- bool visited[100000+7];
- bool fl=0;
- void bfs(int u)
- {
- int i;
- queue<int> q;
- q.push(u);
- visited[u]=1;
- while(!q.empty())
- {
- u=q.front();
- q.pop();
- if(edge[u].size()==0)
- {
- if(level[u]%2==1)
- fl=1;
- }
- int flag=0;
- for(i=0; i<edge[u].size(); i++)
- {
- int v=edge[u][i];
- if(visited[v]==0)
- {
- flag=1;
- visited[v]=1;
- level[v]=level[u]+1;
- q.push(v);
- }
- }
- }
- }
- int main()
- {
- int i,j,p;
- cin>>t;
- fr(i,1,t)
- {
- fl=0;
- scanf("%d %d %d",&n,&m,&x);
- memset(visited,0,sizeof(visited));
- while(m--)
- {
- int u,v;
- scanf("%d %d",&u,&v);
- edge[u].pb(v);
- }
- for(j=0; j<edge[x].size(); j++)
- {
- memset(visited,0,sizeof(visited));
- visited[x]=1;
- level[edge[x][j]]=1;
- bfs(edge[x][j]);
- if(fl)
- break;
- }
- printf("Case %d: ",i);
- printf(fl?"Yes\n":"No\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement