제출 #871545

#제출 시각아이디문제언어결과실행 시간메모리
871545Faisal_SaqibICC (CEOI16_icc)C++17
0 / 100
1 ms604 KiB
#include "icc.h" #include <iostream> #include <set> #include <vector> using namespace std; #define vll vector<int> const int N=200; int par[N]; int sz[N]; // bool adj[N][N]; // void setRoad(int x,int y) // { // } // int query(int n,int m,int a[],int b[]) // { // cout<<"Why? asking \n"; // for(int i=0;i<n;i++) // { // cout<<a[i]<<' '; // } // cout<<endl; // for(int j=0;j<m;j++) // { // cout<<b[j]<<' '; // } // cout<<endl; // for(int i=0;i<n;i++) // { // for(int j=0;j<m;j++) // { // if(adj[a[i]][b[j]]) // return 1; // } // } // return 0; // } void init(int n) { for(int i=1;i<=n;i++) { par[i]=i; sz[i]=1; } } int root(int x) { return (par[x]==x?x:par[x]=root(par[x])); } void join(int x,int y) { x=root(x); y=root(y); if(x<y) { swap(x,y); } if(x!=y) { par[x]=y; sz[y]+=sz[x]; } } int n_n_n; vll modify(vll& a) { vll b; for(auto i:a) for(int j=1;j<=n_n_n;j++) if(root(j)==i) b.push_back(j); return b; } int check_edge(vll& a,vll& b) { int n=a.size(); int m=b.size(); int a_[n]; for(int i=0;i<n;i++) a_[i]=a[i]; int b_[m]; for(int i=0;i<m;i++) b_[i]=b[i]; return query(n,m,a_,b_); } int check_edge1(vll& c,vll& d) { vll a=modify(c),b=modify(d); int n=a.size(); int m=b.size(); int a_[n]; for(int i=0;i<n;i++) a_[i]=a[i]; int b_[m]; for(int i=0;i<m;i++) b_[i]=b[i]; return query(n,m,a_,b_); } vll fit,sed; int fix_first(int l,int r) { if(l==r) return l; int mid=(l+r)/2; vll cur; for(int i=l;i<=mid;i++) cur.push_back(fit[i]); if(check_edge(cur,sed)) return fix_first(l,mid); else return fix_first(mid+1,r); } void between(vll& a,vll& b) { a=modify(a); b=modify(b); fit=a; sed=b; int ind=fix_first(0,((int)a.size())-1); fit={fit[ind]}; swap(sed,fit); ind=fix_first(0,((int)b.size())-1); fit={fit[ind]}; } void run(int n) { n_n_n=n; init(n); int q=n-1; while(q--) { // int x_,y_; // cin>>x_>>y_; // cout<<"New edge is "<<x_<<' '<<y_<<endl; // adj[x_][y_]=adj[y_][x_]=1; vll shif; shif.push_back(0); for(int i=1;i<=n;i++) if(root(i)==i) shif.push_back(i); int s=1; int e=((int)shif.size())-1; while(s+1<e) { int mid=e-1; vll big; for(int i=1;i<mid;i++) big.push_back(shif[i]); vll pk; for(int i=mid;i<shif.size();i++) pk.push_back(shif[i]); if(check_edge1(big,pk)) e=mid; else s=mid; } // cout<<"Hello "<<e<<endl; // for(int i=0;i<shif.size();i++) // { // cout<<i<<' '<<shif[i]<<endl;; // } vll big; for(int j=1;j<e;j++) big.push_back(shif[j]); vll pk; for(int j=e;j<shif.size();j++) pk.push_back(shif[j]); // cout<<"Big :"; // for(auto i:big) // { // cout<<i<<' '; // } // cout<<endl; // cout<<"pk :"; // for(auto i:pk) // { // cout<<i<<' '; // } // cout<<endl; between(big,pk); // cout<<"Big :"; // for(auto i:big) // { // cout<<i<<' '; // } // cout<<endl; // cout<<"pk :"; // for(auto i:pk) // { // cout<<i<<' '; // } // cout<<endl; // cout<<"Edge is "<<fit[0]<<' '<<sed[0]<<endl; join(fit[0],sed[0]); setRoad(fit[0],sed[0]); // break; } } // int main() // { // int n; // cin>>n; // run(n); // }

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

icc.cpp: In function 'void run(int)':
icc.cpp:150:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  150 |       for(int i=mid;i<shif.size();i++)
      |                     ~^~~~~~~~~~~~
icc.cpp:166:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  166 |     for(int j=e;j<shif.size();j++)
      |                 ~^~~~~~~~~~~~
#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...