Advertisement
Guest User

myTask

a guest
Oct 19th, 2013
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.17 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. const int MAXN=12000;
  8.  
  9. vector<pair<int,int> > g[MAXN];
  10.  
  11. bool f[MAXN];
  12. bool met[MAXN];
  13.  
  14. int n,m,k;
  15.  
  16. bool dfs(int v) {
  17.     if (met[v]) return f[v];
  18.     met[v]=true;
  19.     int kol=0;
  20.     for (size_t i=0;i<g[v].size();i++) {
  21.         int to=g[v][i].first;
  22.         if (dfs(to)) kol++;
  23.     }
  24.     if (kol>k) f[v]=true;
  25.     else f[v]=false;
  26.     return f[v];
  27. }
  28.  
  29. void wr(string s) {
  30.     cout << s << endl;
  31.     fflush(stdout);
  32. }
  33.  
  34. int ans[MAXN];
  35. int len;
  36.  
  37. int main()
  38. {
  39.     int i,a,b,v;
  40.     cin >> n >> m >> k;
  41.  
  42.     for (i=1;i<=m;i++) {
  43.         cin >> a >> b;
  44.         g[a].push_back(make_pair(b,i));
  45.     }
  46.  
  47.     f[n]=true;
  48.     met[n]=true;
  49.     if (dfs(1)) {
  50.         wr("NO");
  51.         return 0;
  52.     }
  53.  
  54.     v=1;
  55.  
  56.     while (v!=-1) {
  57.         len=0;
  58.         for (i=0;i<(int)g[v].size();i++) {
  59.             int to=g[v][i].first,num=g[v][i].second;
  60.             if (dfs(to)) ans[len++]=num;
  61.         }
  62.         cout << len;
  63.         for (i=0;i<len;i++)
  64.             cout << ' ' << ans[i];
  65.         wr("");
  66.         cin >> v;
  67.     }
  68.  
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement