Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#pragma comment(linker, "/STACK:16777216")
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<algorithm>
- #include<vector>
- #include<cstring>
- #include<string>
- #define mp make_pair
- #define scn second
- #define frs first
- #define pb push_back
- #define NAME "INPUT"
- using namespace std;
- const unsigned long long P=239017, MaxN=2100000, INF=100000000;
- typedef unsigned long long ull;
- typedef long long ll;
- typedef pair<int, int> pi;
- int F(int a) {
- if (a == 1)
- return 2;
- return 1;
- }
- vector<int> q;
- int d[101], mtr[101][101], n, used[101];
- int get_answer(int s) {
- q.clear();
- q.pb(s);
- for (int i = 1; i <= n; ++i)
- d[i] = 0;
- int p = 0, ans = 0;
- d[s] = 1;
- while(p < q.size()) {
- int v = q[p++];
- for (int i = 1; i <= n; ++i) {
- if (mtr[v][i] && !used[i]) {
- if (d[v] == d[i]) {
- d[i] = 2;
- continue;
- }
- if (d[i] == 0) {
- d[i] = F(d[v]);
- q.pb(i);
- }
- }
- }
- }
- for (int i = 1; i <= n; ++i) {
- if (d[i] == 1)
- used[i] = 1;
- }
- for (int i = 1; i <= n; ++i) {
- if (d[i] == 2) {
- ans = max(ans, get_answer(i));
- }
- }
- return ans + 1;
- }
- int main(){
- freopen("INPUT.txt", "r", stdin);
- freopen("OUTPUT.txt", "w", stdout);
- scanf("%d", &n);
- for (int i = 1; i <= n; ++i) {
- for (int j = 1; j <= n; ++j)
- scanf("%d", &mtr[i][j]);
- }
- int ans = 0;
- for (int i = 1; i <= n; ++i) {
- if (!used[i]) {
- ans = max(get_answer(i), ans);
- }
- }
- printf("%d", ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment