답안 #86662

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
86662 2018-11-27T04:52:52 Z dimash241 Potemkin cycle (CEOI15_indcyc) C++17
30 / 100
98 ms 16448 KB
# include <stdio.h>
# include <bits/stdc++.h>


#define _USE_MATH_DEFINES_
#define ll long long
#define ld long double
#define Accepted 0
#define pb push_back
#define mp make_pair
#define sz(x) (int)(x.size())
#define every(x) x.begin(),x.end()
#define F first
#define S second
#define For(i,x,y)  for (ll i = x; i <= y; i ++) 
#define FOr(i,x,y)  for (ll i = x; i >= y; i --)
#define SpeedForce ios_base::sync_with_stdio(0), cin.tie(0)
// ROAD to...                                                                                                                                                                                                                Red

using namespace std;

inline bool isvowel (char c) {
	c = tolower(c);
    if (c == 'a' || c == 'e' || c == 'i' || c == 'y' || c == 'o' || c == 'u') return 1;
    return 0;
}

const double eps = 0.000001;
const ld pi = acos(-1);
const int maxn = 1e7 + 9;
const int mod = 1e9 + 7;
const ll MOD = 1e18 + 9;
const ll INF = 1e18 + 123;
const int inf = 2e9 + 11;
const int mxn = 1e6 + 9;
const int N = 6e5 + 123;                                          
const int M = 22;
const int pri = 997;
const int Magic = 2101;

const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, -1, 0, 1};
 
int n, m, k;
vector < int > g[N];
int x[N], y[N];
int u[N], pr[N][20];

int lca (int a, int b) {
	if (u[a] < u[b]) swap(a, b);
	for (int i = 18; i >= 0; i --) {
		if (u[pr[a][i]] >= u[b]) a = pr[a][i];
	}

	for (int i = 18; i >= 0;i --) {
		if (pr[a][i] != pr[b][i]) {
			a = pr[a][i];
			b = pr[b][i];
		}
	}
	return pr[a][0];
}

int main () {               
    cin >> n >> m ;
    For (i, 1, m) {
    	cin >> x[i] >> y[i];
    	g[x[i]].pb(y[i]);
    	g[y[i]].pb(x[i]);
    }

    	for (int i = 1; i <= n; i ++) {
    		random_shuffle(every(g[i])), u[i] = 0;
    		for (int it = 0; it <= 18; it ++)
    			pr[i][it] = 0;
    	}

    	queue < int > q;
    	u[1] = 1;
    	q.push(1);

    	while (q.size()) {
    		int v = q.front();
    		q.pop();
    		
    		for (auto to : g[v]) {
    			if (u[to] && pr[v][0] != to) {
    				int x = lca(to, v);
    				if (u[v] + u[to] - 2 * u[x] >= 3) {
    					vector < int > st;
    					while (v != x) {
    						st.pb(v);
    						v = pr[v][0];
    					}
    					st.pb(x);
    					reverse(every(st));
    					while (to != x) {
    						st.pb(to);
    						to = pr[to][0];
    					}
    					for (auto it : st)
    						cout << it << ' ';
    					exit(0);
    				}
    			}
    			if (!u[to]) {
    				u[to] = u[v] + 1;
    				pr[to][0] = v;
    				for (int i = 1; i <= 18; i ++)
    					pr[to][i] = pr[pr[to][i - 1]][i - 1];
    				q.push(to);
    			}
    		}
    	}

    cout << "no";
    return Accepted;
}

// Coded By OB
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 14456 KB Output is correct
2 Correct 15 ms 14528 KB Output is correct
3 Correct 15 ms 14528 KB Output is correct
4 Correct 15 ms 14700 KB Output is correct
5 Correct 15 ms 14700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 14700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 18 ms 14700 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 14700 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 16 ms 14700 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 19 ms 14748 KB Wrong answer on graph without induced cycle
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 18 ms 14748 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 44 ms 15584 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 28 ms 15584 KB Wrong adjacency
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 98 ms 16448 KB Expected integer, but "no" found
2 Halted 0 ms 0 KB -