Friday, 28 July 2017

Lightoj 1111 - Best Picnic Ever

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define N 1005
  4. vector<int> adj[N];
  5. vector<int>people;
  6. int k, n, m;
  7. bool visited[N];
  8. int ct[N];
  9. void clear(){
  10.     people.clear();
  11.     memset(ct, 0sizeof(ct));
  12.     memset(visited,falsesizeof(visited));
  13.     for(int i = 0; i <=n; i++){
  14.         adj[i].clear();
  15.     }
  16. }
  17. void dfs(int source){
  18.     if(visited[source]) return;
  19.     visited[source] = true;
  20.     ct[source]++;
  21.     //cout<<source<<" ";
  22.     for(int i = 0; i < adj[source].size(); i++){
  23.         dfs(adj[source][i]);
  24.     }
  25. }
  26.  
  27. int main(){
  28.     int ts;
  29.     scanf("%d"&ts);
  30.     for(int c = 1; c <= ts; c++){
  31.     clear();
  32.     scanf("%d%d%d",&k, &n, &m);
  33.     for(int i = 0; i <k; i++){
  34.         int p;
  35.         cin>>p;
  36.         people.push_back(p);
  37.     }
  38.     for(int i = 0; i <m; i++){
  39.         int a, b;
  40.         scanf("%d%d"&a, &b);
  41.         adj[a].push_back(b);
  42.     }
  43.     for(int i = 0; i <people.size(); i++) {dfs(people[i]); memset(visited, falsesizeof(visited));}
  44.     int ans = 0;
  45.     for(int i = 1; i <=n; i++) ans+= (ct[i]==people.size());
  46.     //for(int i = 1; i <=n; i++) cout<<ct[i]<<" ";
  47.     printf("Case %d: %d\n", c, ans);
  48.     }
  49.     return 0;
  50. }

No comments:

Post a Comment

Most Featured Post

Lightoj 1159 - Batman

http://lightoj.com/volume_showproblem.php?problem=1159 problem analysis: First i thought of this as if s1, s2 and s3 are those three str...