Submission #443939

#TimeUsernameProblemLanguageResultExecution timeMemory
443939ComPhyParkParachute rings (IOI12_rings)C++14
Compilation error
0 ms0 KiB
#include<cstdio> #include<vector> #include<set> using namespace std; const int SZ = 1000010; int min(int a, int b) { return a < b ? a : b; } int n; const bool ifDebug = false; int cycleNum; vector<vector<int>>l; typedef struct Graph { int st[4], ts[3]; int p[SZ], sz[SZ], cs[SZ][4], c[SZ]; int x; bool isMain; void init() { x = n; isMain = true; st[0] = ts[0] = n; st[1] = st[2] = st[3] = ts[1] = ts[2] = 0; for (int i = 0; i < n; i++) { p[i] = i; cs[i][0] = sz[i] = 1; cs[i][1] = cs[i][2] = cs[i][3] = 0; } } void init(int X) { isMain = false; init(); x = X; for (int i = 0; i < n; i++) { for (int e : l[i]) { if (e < i)Link(e, i); } } } int f(int a) { vector<int>v; while (a != p[a]) { v.push_back(a); a = p[a]; } for (int e : v)p[e] = a; return a; } void u(int A, int B) { int a = f(A), b = f(B); if (a != b) { p[b] = a; ts[gT(a)]--; ts[gT(b)]--; for (int i = 0; i < 4; i++) { cs[a][i] += cs[b][i]; } sz[a] += sz[b]; } else { ts[gT(a)]--; } } void Con(int A, int B) { int a = f(A); cs[a][min(c[A], 3)]--; st[min(c[A], 3)]--; if(isMain)l[A].push_back(B); c[A]++; cs[a][min(c[A], 3)]++; st[min(c[A], 3)]++; } int gT(int a) { if (cs[a][3]) { return 2; } else if (cs[a][2] && (cs[a][1] + cs[a][0] == 0)) { return 1; } else { return 0; } } void Link(int A, int B) { if (A == x || B == x)return; u(A, B); Con(A, B); Con(B, A); int a = f(A); ts[gT(a)]++; } bool isChain() { return (ts[1] + ts[2] == 0); } void PR() { if (!ifDebug)return; printf("-------%d-------\n", x); for (int a = 0; a < n; a++) { if (a == p[a]) { printf("[%d(%d,%d)]", a, sz[a], gT(a)); for (int b = 0; b < 4; b++)printf(" %d", cs[a][b]); printf("\n"); } else { printf("%d->%d\n", a, f(a)); } } printf("-----------------\n"); } }Graph; Graph MG, GV[4]; int GS; //type: 0-chain/1-cycle/2-3 exists/3-4 exists void Init(int N) { l.resize(N); cycleNum = n = N; MG.init(); } void Link(int A, int B) { bool p = (MG.st[3] == 0); MG.Link(A, B); for (int i = 0; i < GS; i++) { GV[i].Link(A, B); } if (MG.gT(MG.f(A)) == 1)cycleNum = MG.f(A); if (MG.gT(MG.f(B)) == 1)cycleNum = MG.f(B); if (p && MG.st[3]) { if (ifDebug)printf("걸렸구나!!!!!!!!!\n"); int a = A; if (l[A].size() < 3)a = B; GV[GS++].init(a); //return; for (int e : l[a]) { GV[GS++].init(e); } } } int CountCritical() { if (MG.ts[2]) { if (ifDebug)printf(">=3 Exists"); int r = 0; for (int i = 0; i < GS; i++) { if (GV[i].isChain())r++; } return r; } else if (MG.ts[1]) { if (ifDebug)printf("cycle Exists"); if (MG.ts[1] > 1)return 0; return MG.sz[cycleNum]; } else { if (ifDebug)printf("Already Chain"); return n; } } int main() { int n, l, a, b; scanf("%d%d", &n, &l); Init(n); while (l--) { scanf("%d", &a); if (a == -1) { printf("%d\n", CountCritical()); } else { scanf("%d", &b); Link(a, b); } MG.PR(); for (a = 0; a < GS; a++) { GV[a].PR(); } if (ifDebug)printf("cycle No: %d\n", cycleNum); } return 0; }

Compilation message (stderr)

rings.cpp: In function 'int main()':
rings.cpp:156:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  156 |  scanf("%d%d", &n, &l);
      |  ~~~~~^~~~~~~~~~~~~~~~
rings.cpp:159:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  159 |   scanf("%d", &a);
      |   ~~~~~^~~~~~~~~~
rings.cpp:164:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  164 |    scanf("%d", &b);
      |    ~~~~~^~~~~~~~~~
/usr/bin/ld: /tmp/ccOtyWPO.o: in function `main':
rings.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccacPEKO.o:grader.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status