Guest User

Untitled

a guest
Dec 1st, 2012
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. //#pragma comment(linker, "/STACK:16777216")
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<vector>
  7. #include<cstring>
  8. #include<string>
  9. #define mp make_pair
  10. #define scn second
  11. #define frs first
  12. #define pb push_back
  13. #define NAME "INPUT"
  14. using namespace std;
  15. const unsigned long long P=239017, MaxN=2100000, INF=100000000;
  16. typedef unsigned long long ull;
  17. typedef long long ll;
  18. typedef pair<int, int> pi;
  19.  
  20. int F(int a) {
  21.     if (a == 1)
  22.         return 2;
  23.     return 1;
  24.  
  25. }
  26.  
  27. vector<int> q;
  28. int d[101], mtr[101][101], n, used[101];
  29.  
  30. int get_answer(int s) {
  31.     q.clear();
  32.     q.pb(s);
  33.     for (int i = 1; i <= n; ++i)
  34.         d[i] = 0;
  35.     int p = 0, ans = 0;
  36.     d[s] = 1;
  37.  
  38.     while(p < q.size()) {
  39.         int v = q[p++];
  40.         for (int i = 1; i <= n; ++i) {
  41.             if (mtr[v][i] && !used[i]) {
  42.                 if (d[v] == d[i]) {
  43.                     d[i] = 2;
  44.                     continue;
  45.                 }
  46.                 if (d[i] == 0) {
  47.                     d[i] = F(d[v]);
  48.                     q.pb(i);
  49.                 }
  50.             }  
  51.         }
  52.     }  
  53.     for (int i = 1; i <= n; ++i) {
  54.         if (d[i] == 1)
  55.             used[i] = 1;
  56.     }
  57.     for (int i = 1; i <= n; ++i) {
  58.         if (d[i] == 2) {
  59.             ans = max(ans, get_answer(i));
  60.         }
  61.     }
  62.     return ans + 1;
  63. }
  64.  
  65.  
  66. int main(){
  67.  
  68.     freopen("INPUT.txt", "r", stdin);
  69.     freopen("OUTPUT.txt", "w", stdout);
  70.     scanf("%d", &n);
  71.     for (int i = 1; i <= n; ++i) {
  72.         for (int j = 1; j <= n; ++j)
  73.             scanf("%d", &mtr[i][j]);
  74.     }
  75.     int ans = 0;
  76.     for (int i = 1; i <= n; ++i) {
  77.         if (!used[i]) {
  78.             ans = max(get_answer(i), ans);
  79.         }
  80.  
  81.     }
  82.     printf("%d", ans);
  83.  
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment