This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// credit: bieoiibe
#include "coprobber.h"
#include <bits/stdc++.h>
#define pb push_back
#define ppb pop_back
#define fr first
#define sc second
#define all(v) v.begin(), v.end()
#define mod (long long)(1e9 + 7)
#define eps (long long)(1e-9)
#define vektor vector
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
const ll Mod = 1e9 + 7;
vector <vector <int>> f(500, vector <int>(500, 10000));
vector <vector <int>> graph(500);
vektor <int> v(500, 0);
int start(int n, bool a[500][500]){
for(int i = 0 ; i < n; i ++){
for(int j = i; j < n; j ++){
if(a[i][j]) {
graph[i].pb(j);
graph[j].pb(i);
}
}
}
for(int i = 0; i < n; i ++){
f[i][i] = 0;
for(auto& x : graph[i]) f[i][x] = f[x][i] = 1;
}
for(int j = 0; j < n; j ++){
for(int i = 0; i < n; i ++){
for(int k = 0; k < n; k ++){
if(f[i][j] + f[j][k] < f[i][k]) f[i][k] = f[i][j] + f[j][k];
}
}
}
// for(int i = 0; i < n; i ++)
// for(int j = 0; j < n; j ++)
// cout << i << " " << j << " " << f[i][j] << "\n";
int mn = INT_MAX;
for(int i = 0; i < n; i ++){
queue <int> q;
vector <int> root(n, 0), val(n, -1);
q.push(i);
val[i] = 0;
while(!q.empty()){
int s = q.front();
q.pop();
for(auto& x : graph[s]){
if(val[x] >= 0 && root[x] != root[root[s]] && val[x] + val[s] >= 2){
mn = min(mn, val[x] + val[s] + 1);
break;
}
if(val[x] == -1){
val[x] = val[s] + 1;
root[x] = s;
q.push(x);
}
}
}
}
v[0] = 1;
if(mn >= 5 && mn != INT_MAX) return -1;
return 0;
}
int cur = 0;
int nextMove(int pos){
int temp = cur;
int s = INT_MAX;
for(auto& x : graph[temp]){
if(f[x][pos] <= s && !v[x]){
cur = x;
s = f[x][pos];
}
}
v[cur] = 1;
return cur;
}
// void solve(){
// int n;
// cin >> n;
// bool a[500][500];
// for(int i = 0; i < n; i ++){
// for(int j = 0; j < n; j ++) cin >> a[i][j];
// }
// cout << start(n, a) << " !!!\n";
// int s;
// while(cin >> s){
// int w = nextMove(s);
// cout << w << "\n";
// if(w == s) break;
// }
// cout << "!!\n";
// }
// signed main()
// {
// // cin.tie(0)->sync_with_stdio(0);
// if(fopen("blank.inp", "r")){
// freopen("blank.inp", "r", stdin);
// freopen("blank.out", "w", stdout);
// }
// // // cout << 1; return 0;
// ll n = 1;
// // // cin >> n;
// while(n) {
// solve();
// n --;
// cout << "\n";
// }
// // cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
// }
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |