제출 #547384

#제출 시각아이디문제언어결과실행 시간메모리
547384dualityJail (JOI22_jail)C++17
61 / 100
5067 ms33616 KiB
#define DEBUG 0 #include <bits/stdc++.h> using namespace std; #if DEBUG // basic debugging macros int __i__,__j__; #define printLine(l) for(__i__=0;__i__<l;__i__++){cout<<"-";}cout<<endl #define printLine2(l,c) for(__i__=0;__i__<l;__i__++){cout<<c;}cout<<endl #define printVar(n) cout<<#n<<": "<<n<<endl #define printArr(a,l) cout<<#a<<": ";for(__i__=0;__i__<l;__i__++){cout<<a[__i__]<<" ";}cout<<endl #define print2dArr(a,r,c) cout<<#a<<":\n";for(__i__=0;__i__<r;__i__++){for(__j__=0;__j__<c;__j__++){cout<<a[__i__][__j__]<<" ";}cout<<endl;} #define print2dArr2(a,r,c,l) cout<<#a<<":\n";for(__i__=0;__i__<r;__i__++){for(__j__=0;__j__<c;__j__++){cout<<setw(l)<<setfill(' ')<<a[__i__][__j__]<<" ";}cout<<endl;} // advanced debugging class // debug 1,2,'A',"test"; class _Debug { public: template<typename T> _Debug& operator,(T val) { cout << val << endl; return *this; } }; #define debug _Debug(), #else #define printLine(l) #define printLine2(l,c) #define printVar(n) #define printArr(a,l) #define print2dArr(a,r,c) #define print2dArr2(a,r,c,l) #define debug #endif // define #define MAX_VAL 999999999 #define MAX_VAL_2 999999999999999999LL #define EPS 1e-6 #define mp make_pair #define pb push_back // typedef typedef unsigned int UI; typedef long long int LLI; typedef unsigned long long int ULLI; typedef unsigned short int US; typedef pair<int,int> pii; typedef pair<LLI,LLI> plli; typedef vector<int> vi; typedef vector<LLI> vlli; typedef vector<pii> vpii; typedef vector<plli> vplli; // ---------- END OF TEMPLATE ---------- int S[120000],T[120000]; vi adjList[120000]; vi adjList2[120000]; int parent[120000][17],depth[120000],disc[120000],fin[120000],num = 0; int doDFS(int u,int p,int d) { parent[u][0] = p,depth[u] = d,disc[u] = num++; for (int v: adjList[u]) { if (v != p) doDFS(v,u,d+1); } fin[u] = num; return 0; } int logn; int lca(int u,int v) { int i; if (depth[u] < depth[v]) swap(u,v); for (i = logn-1; i >= 0; i--) { if ((parent[u][i] != -1) && (depth[parent[u][i]] >= depth[v])) u = parent[u][i]; } if (u == v) return u; for (i = logn-1; i >= 0; i--) { if (parent[u][i] != parent[v][i]) u = parent[u][i],v = parent[v][i]; } return parent[u][0]; } int anc(int u,int v) { return ((disc[v] >= disc[u]) && (disc[v] < fin[u])); } int onPath(int u,int v,int w,int l) { if (!anc(l,w)) return 0; return anc(w,u) || anc(w,v); } int visited[120000],no = 0; int doDFS2(int u) { if (visited[u] != 0) { if (visited[u] == 1) no = 1; return 0; } visited[u] = 1; for (int v: adjList2[u]) doDFS2(v); visited[u] = 2; return 0; } int main() { int i,j; int Q,N,M,A,B; scanf("%d",&Q); while (Q--) { scanf("%d",&N); for (i = 0; i < N-1; i++) { scanf("%d %d",&A,&B); A--,B--; adjList[A].pb(B); adjList[B].pb(A); } scanf("%d",&M); for (i = 0; i < M; i++) scanf("%d %d",&S[i],&T[i]),S[i]--,T[i]--; num = 0,doDFS(0,-1,0); for (i = 1; (1 << i) < N; i++) { for (j = 0; j < N; j++) { if (parent[j][i-1] != -1) parent[j][i] = parent[parent[j][i-1]][i-1]; else parent[j][i] = -1; } } logn = i; for (i = 0; i < M; i++) { int l = lca(S[i],T[i]); for (j = 0; j < M; j++) { if (i != j) { if (onPath(S[i],T[i],S[j],l)) adjList2[j].pb(i); if (onPath(S[i],T[i],T[j],l)) adjList2[i].pb(j); } } } fill(visited,visited+M,0),no = 0; for (i = 0; i < M; i++) { if (visited[i] == 0) doDFS2(i); } if (no) printf("No\n"); else printf("Yes\n"); for (i = 0; i < N; i++) adjList[i].clear(),adjList2[i].clear(); } return 0; }

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

jail.cpp: In function 'int main()':
jail.cpp:105:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  105 |     scanf("%d",&Q);
      |     ~~~~~^~~~~~~~~
jail.cpp:107:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  107 |         scanf("%d",&N);
      |         ~~~~~^~~~~~~~~
jail.cpp:109:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  109 |             scanf("%d %d",&A,&B);
      |             ~~~~~^~~~~~~~~~~~~~~
jail.cpp:114:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  114 |         scanf("%d",&M);
      |         ~~~~~^~~~~~~~~
jail.cpp:115:38: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  115 |         for (i = 0; i < M; i++) scanf("%d %d",&S[i],&T[i]),S[i]--,T[i]--;
      |                                 ~~~~~^~~~~~~~~~~~~~~~~~~~~
#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...