제출 #244521

#제출 시각아이디문제언어결과실행 시간메모리
244521dwscPotemkin cycle (CEOI15_indcyc)C++14
40 / 100
55 ms5504 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int,int> ii; int n,m; vector<int> adj[1010]; int mat[1010][1010]; int depth[1010],p[1010]; int relabel[1010]; int counter; int visited[1010]; int rmap[1010]; int comp[1010]; void dfs(int u,int pa){ visited[u] = 1; //cout << u << pa << "hi\n"; for (int i = 0; i < adj[u].size(); i++){ int v = adj[u][i]; if (!visited[v]){ p[v] = u; depth[v] = depth[u]+1; visited[v] = 1; comp[v] = comp[u]; dfs(v,u); } } relabel[u] = ++counter; rmap[relabel[u]] = u; } vector<int> lowestjump[1010]; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for (int i = 0; i < m; i++){ int x,y; cin >> x >> y; mat[x][y] = mat[y][x] = 1; adj[x].push_back(y); adj[y].push_back(x); } int num = 0; for (int i = 1; i <= n; i++){ if (!visited[i]){ depth[i] = 1; p[i] = -1; comp[i] = num++; dfs(i,-1); } } for (int i = 1; i <= n; i++){ if (p[i] != -1) assert(relabel[p[i]] > relabel[i]); for (int j = 0; j < adj[i].size(); j++){ int ni = adj[i][j]; if (p[ni] == i || p[i] == ni) continue; if (depth[i] < depth[ni]) continue; lowestjump[i].push_back(relabel[ni]); } lowestjump[i].push_back(relabel[p[i]]); sort(lowestjump[i].begin(),lowestjump[i].end()); } for (int i = 1; i <= n; i++){ for (int j = 1; j <= n; j++){ if (i == j) continue; if (comp[i] != comp[j] || depth[i]-depth[j] < 3) continue; if (mat[i][j] && comp[i] == comp[j]){ int start = i, fin = j; //cout << start << " " << fin << "\n"; int counter = 1; int cur = start; vector<int> temp; temp.push_back(cur); while (relabel[cur] < relabel[fin]){ int relabelval = *(upper_bound(lowestjump[cur].begin(),lowestjump[cur].end(),relabel[fin])-1); if (cur == start) relabelval = *(lower_bound(lowestjump[cur].begin(),lowestjump[cur].end(),relabel[fin])-1); int pos = rmap[relabelval]; cur = pos; temp.push_back(cur); //start++; } if (cur != fin || temp.size() < 4) continue; for (int k = 0; k < temp.size(); k++) cout <<temp[k] << " "; return 0; } else if (n <= 300){ int prev[n]; for (int k = 0; k < n; k++){ prev[k] = -1; } prev[i] = 0; queue<int> q; q.push(i); vector<int> temp; while (!q.empty()){ int u = q.front(); q.pop(); if (mat[u][j]){ temp.push_back(u); continue; } for (int k = 0; k < adj[u].size(); k++){ int v = adj[u][k]; if (prev[v] == -1){ prev[v] = u; q.push(v); } } } if (temp.size() > 1){ vector<int> v1,v2; int cur = temp[0]; while (cur != i){ v1.push_back(cur); cur = prev[cur]; } cur = temp[1]; while (cur != i){ v2.push_back(cur); cur = prev[cur]; } cout << i << " "; for (int k = v1.size()-1; k >= 0; k--) cout << v1[k] << " "; cout << j << " "; for (int k = 0; k < v2.size(); k++) cout << v2[k] << " "; return 0; } } } } cout << "no"; return 0; }

컴파일 시 표준 에러 (stderr) 메시지

indcyc.cpp: In function 'void dfs(int, int)':
indcyc.cpp:16:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < adj[u].size(); i++){
                     ~~^~~~~~~~~~~~~~~
indcyc.cpp: In function 'int main()':
indcyc.cpp:52:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 0; j < adj[i].size(); j++){
                         ~~^~~~~~~~~~~~~~~
indcyc.cpp:81:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 for (int k = 0; k < temp.size(); k++) cout <<temp[k] << " ";
                                 ~~^~~~~~~~~~~~~
indcyc.cpp:68:21: warning: unused variable 'counter' [-Wunused-variable]
                 int counter = 1;
                     ^~~~~~~
indcyc.cpp:100:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                     for (int k = 0; k < adj[u].size(); k++){
                                     ~~^~~~~~~~~~~~~~~
indcyc.cpp:123:39: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                     for (int k = 0; k < v2.size(); k++) cout << v2[k] << " ";
                                     ~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...