Submission #1300756

#TimeUsernameProblemLanguageResultExecution timeMemory
1300756denislavAirline Route Map (JOI18_airline)C++20
100 / 100
155 ms30260 KiB
#include "Alicelib.h" # include <iostream> # include <vector> # include <algorithm> using namespace std; void Alice( int N, int M, int A[], int B[] ) { int n=N,m=M; vector<pair<int,int>> edges; for(int i=0;i<m;i++) edges.push_back({A[i],B[i]}); for(int i=0;i+1<=9;i++) edges.push_back({n+i,n+i+1}); for(int i=0;i<=9;i++) edges.push_back({n+i,n+10}); edges.push_back({n+10,n+11}); int num=2; for(int i=0;i<n;i++) { num++; while(__builtin_popcount(num)<=1) num++; //cout<<i<<" is represented by:"<<num<<"\n"; for(int bit=0;bit<=9;bit++) { if((num&(1<<bit))>0) edges.push_back({i,n+bit}); } } int sz=edges.size(); InitG(n+12,sz); for(int i=0;i<sz;i++) MakeG(i,edges[i].first,edges[i].second); }
#include "Boblib.h" #include <cassert> #include <cstdio> # include <iostream> # include <vector> # include <algorithm> using namespace std; const int MAX=1024; vector<int> adj[MAX]; int deg[MAX]; bool spec[MAX]; bool vis[MAX]; int cnt_spec[MAX]; int number[MAX]; int rep[MAX]; void Bob( int V, int U, int C[], int D[] ) { for(int i=0;i<U;i++) { int u=C[i],v=D[i]; adj[u].push_back(v); adj[v].push_back(u); deg[u]++; deg[v]++; } //for(int i=0;i<V;i++) cout<<i<<":"<<deg[i]<<"\n"; int s=0; for(int i=0;i<V;i++) { if(deg[i]==1) { s=i; break; } } s=adj[s][0]; for(int nxt: adj[s]) { if(deg[nxt]!=1) { spec[nxt]=1; } } for(int i=0;i<V;i++) { if(spec[i]) { for(int nxt: adj[i]) { if(spec[nxt]) cnt_spec[i]++; } } } vector<int> bits; int curr=-1; for(int i=0;i<V;i++) { if(spec[i] and cnt_spec[i]==1) { if(curr==-1) curr=i; else if(deg[curr]<deg[i]) curr=i; } } for(int i=0;i<10;i++) { bits.push_back(curr); vis[curr]=1; if(i==9) break; for(int nxt: adj[curr]) { if(spec[nxt] and !vis[nxt]) { curr=nxt; break; } } } spec[s]=1; //for(int x: bits) cout<<x<<" "; //cout<<"\n"; for(int bit=0;bit<10;bit++) { curr=bits[bit]; for(int nxt: adj[curr]) { if(!spec[nxt]) number[nxt]+=(1<<bit); } } int num=2; for(int i=0;i<V-12;i++) { num++; while(__builtin_popcount(num)<=1) num++; rep[num]=i; } vector<pair<int,int>> edges; for(int i=0;i<U;i++) { int u=C[i],v=D[i]; if(!spec[u] and !spec[v]) edges.push_back({rep[number[u]],rep[number[v]]}); } int sz=edges.size(); //cout<<"->"<<V-12<<" "<<sz<<"\n"; InitMap(V-12,sz); for(int i=0;i<sz;i++) MakeMap(edges[i].first,edges[i].second); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...