# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
351255 | 2021-01-19T17:36:11 Z | CaroLinda | Potemkin cycle (CEOI15_indcyc) | C++14 | 1000 ms | 198176 KB |
#include <bits/stdc++.h> #define ll long long #define sz(x) (int)(x.size()) #define all(x) x.begin(),x.end() const int MAX = 1e6+10 ; const int MAXN = 1010 ; using namespace std ; int N , M ; int minDiff = MAX , lo = -1 , hi = -1 ; vector<int> trash[MAXN] , adj[MAX] , revAdj[MAX] ; int height[MAX] , par[MAX] , comp[MAX] ; int code[MAXN][MAXN] ; bool mat[MAXN][MAXN] ; bool vis[MAX],isOn[MAX] ; vector<int> List ; void dfs1(int x) { vis[x] = true ; for(auto e : adj[x] ) if(!vis[e] ) dfs1(e) ; List.push_back(x) ; } void dfs2(int x ) { for(auto e : revAdj[x] ) if(!comp[e]) { comp[e] = comp[x] ; dfs2(e) ; } } void dfs3(int x , int depth ) { height[x] = depth ; isOn[x] = true ; for(auto e : adj[x] ) { if( comp[e] != comp[x] || e == par[x] ) continue ; if( height[e] ) { if( isOn[e] && height[x] - height[e] < minDiff ) { minDiff = height[x] - height[e] ; lo = x ; hi = e ; } continue ; } par[e] = x ; dfs3(e,depth+1) ; } isOn[x] = false ; } int main() { scanf("%d %d", &N, &M ) ; for(int i = 0 , u , v ; i < M ; i++ ) { scanf("%d %d", &u, &v ) ; --u ; --v ; mat[u][v] = mat[v][u] = true ; trash[u].push_back(v) ; trash[v].push_back(u) ; } for(int i = 0 , c = 0 ; i < N ; i++ ) for(int j = 0 ; j < N ; j++ , c++ ) code[i][j] = c ; for(int i = 0 ; i < N ; i++ ) for(int j = 0 ; j < N ; j++ ) { if( i == j || !mat[i][j] ) continue ; for(auto k : trash[j] ) { if(mat[i][k] || i == k) continue ; adj[ code[i][j] ].push_back( code[j][k] ) ; revAdj[ code[j][k] ].push_back(code[i][j] ) ; } } for(int i = 0 ; i < N ; i++ ) for(int j= 0 ; j < N ; j++ ) { if( i == j || vis[ code[i][j] ] ) continue ; dfs1(code[i][j] ) ; } for(int i = sz(List)-1 ,c = 0 ; i >= 0 ; i-- ) { if(comp[ List[i] ] ) continue ; comp[ List[i] ] = ++c ; dfs2(List[i] ) ; } for(int i = 0 ; i <= code[N-1][N-1] ; i++ ) vis[i] = false ; for(int e : List ) { if(vis[ comp[e] ] ) continue ; vis[ comp[e] ] = true ; dfs3(e, 1) ; if(lo != -1 ) break ; } if( lo == -1 ) { printf("no\n") ; return 0 ; } vector<int> ans ; while(lo != par[hi] ) { ans.push_back(lo%N) ; lo = par[lo] ; } for(auto e : ans ) printf("%d ", e+1 ) ; printf("\n" ) ; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 29 ms | 47340 KB | Output is correct |
2 | Correct | 30 ms | 47340 KB | Output is correct |
3 | Correct | 29 ms | 47340 KB | Output is correct |
4 | Correct | 29 ms | 47340 KB | Output is correct |
5 | Correct | 29 ms | 47340 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 31 ms | 47468 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 31 ms | 47368 KB | Output is correct |
2 | Correct | 33 ms | 47340 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 33 ms | 48108 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 35 ms | 48492 KB | Output is correct |
2 | Correct | 33 ms | 48620 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 40 ms | 50796 KB | Output is correct |
2 | Correct | 39 ms | 50924 KB | Output is correct |
3 | Correct | 59 ms | 54560 KB | Output is correct |
4 | Correct | 56 ms | 54632 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 50 ms | 53228 KB | Output is correct |
2 | Correct | 49 ms | 53348 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 638 ms | 99576 KB | Output is correct |
2 | Correct | 180 ms | 73008 KB | Output is correct |
3 | Correct | 605 ms | 98260 KB | Output is correct |
4 | Correct | 183 ms | 72592 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 410 ms | 157408 KB | Output is correct |
2 | Correct | 449 ms | 168168 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 160 ms | 54112 KB | Output is correct |
2 | Correct | 154 ms | 53476 KB | Output is correct |
3 | Execution timed out | 1101 ms | 198176 KB | Time limit exceeded |
4 | Halted | 0 ms | 0 KB | - |