Submission #1081490

#TimeUsernameProblemLanguageResultExecution timeMemory
1081490LCJLYThe Ties That Guide Us (CEOI23_incursion)C++17
12 / 100
3015 ms11676 KiB
#include "incursion.h" #include <bits/stdc++.h> //#include "sample_grader.cpp" using namespace std; //#define int long long //#define ld long double #define show(x,y) cerr << y << " " << #x << endl; #define show2(x,y,i,j) cerr << y << " " << #x << " " << j << " " << #i << endl; #define show3(x,y,i,j,p,q) cerr << y << " " << #x << " " << j << " " << #i << " " << q << " " << #p << endl; #define show4(x,y) for(auto it:y) cerr << it << " "; cout << #x << endl; typedef pair<int,int>pii; typedef pair<pii,int>pi2; int n; vector<int>adj[45005]; int pp[45005]; int sz[45005]; void dfs(int index, int par){ sz[index]=1; for(auto it:adj[index]){ if(it==par) continue; pp[it]=index; dfs(it,index); sz[index]+=sz[it]; } } vector<int>mark(vector<pair<int, int>> F, int safe){ n=F.size()+1; for(int x=0;x<n-1;x++){ adj[F[x].first].push_back(F[x].second); adj[F[x].second].push_back(F[x].first); } int rt=0; for(int x=1;x<=n;x++){ if(adj[x].size()==2){ dfs(x,-1); rt=x; } } //show(rt,rt); vector<int>ans(n,0); int cur=safe; int take=-1; while(cur){ ans[cur-1]=1; if(take==-1){ ans[cur-1]=1; if(cur==rt) break; take=cur; cur=pp[cur]; } else{ //show2(cur,cur,take,take); int nxt=sz[cur]-sz[take]-1; //show2(sz[take],sz[take],nxt,nxt); if(sz[take]<nxt){ ans[cur-1]=1; } else ans[cur-1]=2; if(cur==rt) break; take=cur; cur=pp[cur]; } } return ans; } //visit() void locate(vector<pair<int, int>> F, int curr, int t){ n=F.size()+1; for(int x=0;x<=n;x++){ adj[x].clear(); } for(int x=0;x<n-1;x++){ adj[F[x].first].push_back(F[x].second); adj[F[x].second].push_back(F[x].first); } memset(pp,0,sizeof(pp)); memset(sz,0,sizeof(sz)); for(int x=1;x<=n;x++){ if(adj[x].size()==2){ dfs(x,-1); } } bool done[n+5]; memset(done,0,sizeof(done)); while(1){ //show2(curr,curr,t,t); done[curr]=true; if(t==0){ //go up done[curr]=true; t=visit(pp[curr]); curr=pp[curr]; } else if(t==1){ //go small bool amos=false; pii mini={1e9,0}; for(auto it:adj[curr]){ if(it==pp[curr]) continue; if(done[it]) continue; //show(it,it); mini=min(mini,{sz[it],it}); amos=true; } //show2(mini.first,mini.first,mini.second,mini.second); if(!amos||done[mini.second]) return; t=visit(mini.second); curr=mini.second; } else{ //go big pii maxi={-1e9,0}; bool amos=false; for(auto it:adj[curr]){ if(it==pp[curr]) continue; if(done[it]) continue; maxi=max(maxi,{sz[it],it}); amos=true; } if(!amos||done[maxi.second]) return; t=visit(maxi.second); curr=maxi.second; } //show(curr,curr); } }

Compilation message (stderr)

interface.cpp: In function 'int main()':
interface.cpp:44:55: warning: comparison of integer expressions of different signedness: 'size_t' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   44 |     if(fread(T.data(), sizeof(int), 2 * N - 2, stdin) != 2 * N - 2) exit(0);
      |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
interface.cpp:50:33: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   50 |         int l = (numbers.size() == N ? N : 0);
      |                  ~~~~~~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...