제출 #116509

#제출 시각아이디문제언어결과실행 시간메모리
116509MvC통행료 (IOI18_highway)C++14
51 / 100
243 ms13124 KiB
#pragma GCC target("avx2") #pragma GCC optimization("O3") #pragma GCC optimization("unroll-loops") #include<bits/stdc++.h> #include "highway.h" #define rc(x) return cout<<x<<endl,0 #define pb push_back #define mkp make_pair #define in insert #define er erase #define fd find #define fr first #define sc second typedef long long ll; typedef long double ld; const ll INF=0x3f3f3f3f3f3f3f3f; const ll llinf=(1LL<<62); const int inf=(1<<30); const ll nmax=1e5+50; const int mod=1e9+7; using namespace std; int n,i,x,y,viz[nmax],l,r,mid,ub,lb; ll d,d1,f,s; vector<pair<int,int> >ord,a[nmax],nw; vector<int>vc; void dfs(int x,int y) { if(viz[x])return; if(y!=-1)ord.pb(mkp(x,y)); viz[x]=1; for(int i=0;i<a[x].size();i++)dfs(a[x][i].fr,a[x][i].sc); } void dfs1(int x,int l,int y) { if(viz[x])return; viz[x]=1; if(l==d/f)nw.pb(mkp(x,y)); for(int i=0;i<a[x].size();i++)dfs1(a[x][i].fr,l+1,a[x][i].sc); } int ok(int x) { int i; for(i=0;i<x;i++)vc[ord[i].sc]=1; for(;i<n-1;i++)vc[ord[i].sc]=0; return (ask(vc)<d1); } int ok1(int x) { int i; for(i=0;i<n-1;i++)vc[i]=0; for(i=0;i<x;i++)vc[nw[i].sc]=1; return (ask(vc)==d); } void find_pair(int N,vector<int>U,vector<int>V,int A,int B) { n=N; for(i=0;i<n-1;i++) { x=U[i],y=V[i]; a[x].pb(mkp(y,i)); a[y].pb(mkp(x,i)); } f=A,s=B; dfs(1,-1); for(i=0;i<n-1;i++)vc.pb(0); d=ask(vc); d1=(d/f)*s; l=1,r=n-1; while(l<=r) { mid=(l+r)/2; if(ok(mid))l=mid+1; else ub=mid,r=mid-1; } memset(viz,0,sizeof(viz)); dfs1(ord[ub-1].fr,0,-1); l=1,r=(int)nw.size(); while(l<=r) { mid=(l+r)/2; if(ok1(mid))l=mid+1; else lb=mid,r=mid-1; } answer(nw[lb-1].fr,ord[ub-1].fr); }

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

highway.cpp:2:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization("O3")
 
highway.cpp:3:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
 #pragma GCC optimization("unroll-loops")
 
highway.cpp: In function 'void dfs(int, int)':
highway.cpp:31:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<a[x].size();i++)dfs(a[x][i].fr,a[x][i].sc);
              ~^~~~~~~~~~~~
highway.cpp: In function 'void dfs1(int, int, int)':
highway.cpp:38:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<a[x].size();i++)dfs1(a[x][i].fr,l+1,a[x][i].sc);
              ~^~~~~~~~~~~~
#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...