Submission #1091271

#TimeUsernameProblemLanguageResultExecution timeMemory
1091271DobromirAngelovAirline Route Map (JOI18_airline)C++14
100 / 100
446 ms36552 KiB
#include "Alicelib.h" #include<bits/stdc++.h> using namespace std; static const int MAXN=1505; static const int BIT_CNT=10; static int n,m; static vector<pair<int,int> > edges; static int code[MAXN]; static int deg1=0; void addEdge(int u,int v) { if(u==n+1 || v==n+1) deg1++; edges.push_back({u-1,v-1}); } void returnGraph() { InitG(n+BIT_CNT+2, edges.size()); int pos=0; for(auto cur: edges) { MakeG(pos++, cur.first, cur.second); } } void Alice( int N, int M, int A[], int B[] ) { n=N; m=M; for(int i=0;i<m;i++) { int u=A[i]+1; int v=B[i]+1; addEdge(u,v); } int ptr=1; for(int i=1;i<=n;i++) { while(__builtin_popcount(ptr)==9) ptr++; code[i]=ptr++; } for(int i=1;i<=n;i++) { for(int j=0;j<BIT_CNT;j++) { if(code[i]&(1<<j)) addEdge(i,n+1+j); } } for(int i=1;i<=n+BIT_CNT;i++) { if(i==n+1) continue; addEdge(n+BIT_CNT+1,i); } for(int i=1;i<=BIT_CNT;i++) { addEdge(n+BIT_CNT+2,n+i); } for(int i=2;i<BIT_CNT;i++) { addEdge(n+i-1,n+i); } if(deg1==BIT_CNT) addEdge(n+1,n+BIT_CNT); else addEdge(n+BIT_CNT-1,n+BIT_CNT); returnGraph(); }
#include "Boblib.h" #include <bits/stdc++.h> using namespace std; static const int MAXN=1505; static const int BIT_CNT=10; static int n,m; static vector<int> adj[MAXN]; static int mark[MAXN]; static bool isBit[MAXN]; static int val[MAXN]; static int id[MAXN]; static int decode[MAXN]; static bool edge[MAXN][MAXN]; static vector<pair<int,int> > MapEdges; void addMapEdge(int u,int v) { MapEdges.push_back({u-1,v-1}); } void returnMap() { InitMap(n,MapEdges.size()); for(auto cur: MapEdges) { MakeMap(cur.first, cur.second); } } void dfsBit(int v,int d,int par) { int cnt=0; for(auto u: adj[v]) { if(!isBit[u]) continue; if(u==par) continue; cnt++; dfsBit(u,d+1,v); } if(cnt==0 && d==1) val[v]=(1<<(BIT_CNT-1)); else val[v]=(1<<d); } void Bob( int V, int U, int C[], int D[] ) { n=V-BIT_CNT-2; m=U; for(int i=0;i<m;i++) { int u=C[i]+1; int v=D[i]+1; adj[u].push_back(v); adj[v].push_back(u); } int bigR=0; for(int i=1;i<=V;i++) { if(adj[i].size()==n+BIT_CNT-1) { bigR=i; break; } } for(auto u: adj[bigR]) { mark[u]=1; } int smR=0; int bit1=0; for(int i=1;i<=V;i++) { if(i!=bigR && !mark[i]) { if(adj[i].size()==BIT_CNT) smR=i; else bit1=i; } } for(auto u: adj[smR]) { isBit[u]=1; } dfsBit(bit1, 0, -1); for(int i=1;i<=V;i++) { if(i==bigR || i==smR || isBit[i]) continue; for(auto u: adj[i]) { if(isBit[u]) id[i]+=val[u]; } } int ptr=1; for(int i=1;i<=n;i++) { while(__builtin_popcount(ptr)==9) ptr++; decode[ptr++]=i; } for(int i=1;i<=V;i++) { if(id[i]>0) id[i]=decode[id[i]]; } for(int i=1;i<=V;i++) { if(i==bigR || i==smR || isBit[i]) continue; for(auto u: adj[i]) { if(u==bigR || u==smR || isBit[u]) continue; edge[id[i]][id[u]]=1; } } for(int i=1;i<=V;i++) { for(int j=i+1;j<=V;j++) { if(edge[i][j]) addMapEdge(i,j); } } returnMap(); }

Compilation message (stderr)

Bob.cpp: In function 'void Bob(int, int, int*, int*)':
Bob.cpp:62:19: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   62 |   if(adj[i].size()==n+BIT_CNT-1)
      |      ~~~~~~~~~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...