# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
171225 | 2019-12-27T20:08:36 Z | Ruxandra985 | Potemkin cycle (CEOI15_indcyc) | C++14 | 985 ms | 6112 KB |
#include <bits/stdc++.h> //#pragma GCC optimize "Ofast" #define DIMN 1010 using namespace std; vector <int> v[DIMN]; int tt[DIMN] , f[DIMN] , sol[DIMN] , ad[DIMN][DIMN] , ok[DIMN][DIMN]; pair <int,int> mch[100010]; int dont[100010]; int elem , found , n , m; deque <int> dq; char buff[2000000]; int poz = 0; int getnr(){ int nr = 0; while ('0' > buff[poz] || buff[poz] > '9') poz++; while ('0' <= buff[poz] && buff[poz] <= '9'){ nr = nr * 10 + buff[poz] - '0'; poz++; } return nr; } void ignoree (int x){ int i , nod , vecin , sts = 0; /// cel mai scurt drum de la mch[x].first la mch[x].second memset (f , 0 , sizeof(f)); tt[mch[x].first] = 0; for (i=0;i<v[mch[x].second].size();++i){ vecin = v[mch[x].second][i]; if (ad[mch[x].first][vecin] && ad[mch[x].second][vecin]) sts++; } //printf ("%d %d\n",sts , v[mch[x].second].size()); if (sts == v[mch[x].second].size()) return; dq.clear(); dq.push_back(mch[x].first); f[mch[x].first] = 1; while (!dq.empty()){ nod = dq.front(); dq.pop_front(); for (i=0;i<v[nod].size();++i){ vecin = v[nod][i]; if (vecin == mch[x].second && nod != mch[x].first){ f[vecin] = 1 + f[nod]; tt[vecin] = nod; found = 1; break; } if (ad[mch[x].first][vecin] && ad[mch[x].second][vecin]){ if (vecin != mch[x].second) f[vecin] = 2; } else if (!f[vecin]){ f[vecin] = 1 + f[nod]; tt[vecin] = nod; dq.push_back(vecin); } } } if (found){ nod = mch[x].second; while (nod){ sol[++elem] = nod; nod = tt[nod]; } } } void ignore_node (int x){ int i , nod , vecin , sts = 0 , j , vecin1 , vecin2 , sf; /// cel mai scurt drum de la mch[x].first la mch[x].second if (found) return; memset (f , 0 , sizeof(f)); tt[x] = 0; for (i=0;i<v[x].size();++i){ for (j=i+1;j<v[x].size();j++){ vecin1 = v[x][i]; vecin2 = v[x][j]; if (ad[vecin1][vecin2]){ dont[ad[x][vecin1]] = x; dont[ad[x][vecin2]] = x; dont[ad[vecin2][vecin1]] = x; } } } //printf ("%d %d\n",sts , v[mch[x].second].size()); dq.clear(); dq.push_back(x); f[x] = 1; while (!dq.empty()){ nod = dq.front(); dq.pop_front(); if (found) break; for (i=0;i<v[nod].size();++i){ vecin = v[nod][i]; if (dont[ad[nod][vecin]] == x){ if (vecin == x){ found = 1; //f[vecin] = 1 + f[nod]; //tt[vecin] = nod; sf = nod; break; } } else if (!f[vecin]){ f[vecin] = 1 + f[nod]; tt[vecin] = nod; dq.push_back(vecin); } } } if (found){ nod = sf; while (nod){ sol[++elem] = nod; nod = tt[nod]; } } } int main() { FILE *fin = stdin; FILE *fout = stdout; int i , vecin1 , vecin2; fread (buff , 1 , 2000000 , fin); n = getnr(); m = getnr(); for (i=1;i<=m;++i){ mch[i].first = getnr(); mch[i].second = getnr(); v[mch[i].first].push_back(mch[i].second); v[mch[i].second].push_back(mch[i].first); ad[mch[i].first][mch[i].second] = i; ad[mch[i].second][mch[i].first] = i; ad[mch[i].second][mch[i].second] = 1; ad[mch[i].first][mch[i].first] = 1; } int ok = 0 , mom; for (int x=1;x<=n;x++){ mom = 1; for (i=0;i<v[x].size();++i){ for (int j=i+1;j<v[x].size();j++){ vecin1 = v[x][i]; vecin2 = v[x][j]; if (ad[vecin1][vecin2]){ mom = 0; } } } ok = (ok + mom); } if (ok == 1 && n > 300){ for (i=1;i<=n;i++){ //printf ("%d ",i); ignore_node(i); if (found) break; } } else { for (i=1;i<=m;++i){ /// daca ignoram muchia i ignoree (i); if (found) break; } } if (!found) fprintf (fout,"no"); else { for (i=1;i<=elem;++i) fprintf (fout,"%d ",sol[i]); } return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 376 KB | Output is correct |
2 | Correct | 2 ms | 376 KB | Output is correct |
3 | Correct | 2 ms | 376 KB | Output is correct |
4 | Correct | 2 ms | 376 KB | Output is correct |
5 | Correct | 2 ms | 376 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 376 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 376 KB | Output is correct |
2 | Correct | 2 ms | 376 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 760 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 3 ms | 760 KB | Output is correct |
2 | Correct | 5 ms | 880 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 30 ms | 1688 KB | Output is correct |
2 | Correct | 4 ms | 1656 KB | Output is correct |
3 | Correct | 4 ms | 1656 KB | Output is correct |
4 | Correct | 12 ms | 1784 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 1656 KB | Output is correct |
2 | Correct | 35 ms | 1656 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 48 ms | 5748 KB | Output is correct |
2 | Correct | 20 ms | 5068 KB | Output is correct |
3 | Correct | 125 ms | 5752 KB | Output is correct |
4 | Correct | 28 ms | 4984 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 117 ms | 4952 KB | Output is correct |
2 | Correct | 985 ms | 4956 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 102 ms | 4600 KB | Output is correct |
2 | Correct | 137 ms | 4700 KB | Output is correct |
3 | Correct | 46 ms | 6008 KB | Output is correct |
4 | Correct | 267 ms | 6112 KB | Output is correct |