Submission #1220290

#TimeUsernameProblemLanguageResultExecution timeMemory
1220290salmonAirline Route Map (JOI18_airline)C++20
100 / 100
255 ms23168 KiB
#include "Alicelib.h" #include <bits/stdc++.h> using namespace std; void Alice( int N, int M, int A[], int B[] ){ vector<pair<int,int>> edge; int lst[1100]; int pow[11]; vector<int> de; int it = 0; for(int i = 0; i < 10; i++){ pow[i] = N + 50 + i; de.push_back(pow[i]); } for(int i = 0; i < N; i++){ int cont = 0; while(cont < 2){ it++; int c = it; cont = 0; while(c != 0){ cont++; c -= (c&(-c)); } } lst[i] = it; de.push_back(it); for(int i = 0; i < 10; i++){ if( (it&(1<<i)) > 0 ){ edge.push_back({it,pow[i]}); } } } for(int i = 0; i < M; i++){ edge.push_back({lst[A[i]],lst[B[i]]}); } for(int i = 0; i < 9; i++){ edge.push_back({pow[i],pow[i + 1]}); } int b = N + 70; de.push_back(b); for(int i = 0; i < 10; i++) edge.push_back({pow[i],b}); de.push_back(N + 100); edge.push_back({N + 100, b}); InitG(de.size(), edge.size()); sort(de.begin(),de.end()); int i = 0; for(pair<int,int> ii : edge){ int a = lower_bound(de.begin(),de.end(),ii.first) - de.begin(); int b = lower_bound(de.begin(),de.end(),ii.second) - de.begin(); MakeG(i,a,b); i++; } return; }
#include "Boblib.h" #include <bits/stdc++.h> using namespace std; void Bob( int V, int U, int C[], int D[] ){ int d[V]; vector<int> adjlst[V + 2]; bool isten[V + 2]; int itentity[V + 2]; for(int i = 0; i < V; i++) d[i] = 0; for(int i = 0; i < V; i++) isten[i] = false; for(int i = 0; i < U; i++){ d[C[i]]++; d[D[i]]++; adjlst[C[i]].push_back(D[i]); adjlst[D[i]].push_back(C[i]); } int mark = 0; int mark1 = 0; for(int i = 0; i < V; i++){ if(d[i] == 1){ mark = i; } } mark1 = adjlst[mark][0]; vector<int> ten; vector<int> endp; for(int i : adjlst[mark1]){ if(i == mark) continue; isten[i] = true; ten.push_back(i); } for(int i : ten){ int cont = 0; for(int j : adjlst[i]){ if(isten[j]) cont++; } if(cont == 1) endp.push_back(i); } ten.clear(); if(d[endp[0]] < d[endp[1]]) swap(endp[0],endp[1]); endp.pop_back(); int i = endp[0]; int p = -1; while(true){ ten.push_back(i); bool die = true; for(int j : adjlst[i]){ if(!isten[j] || j == p) continue; p = i; i = j; die = false; break; } if(die) break; } assert(ten.size() == 10); for(int i = 0; i < V; i++) itentity[i] = -1; itentity[mark] = -2; itentity[mark1] = -2; for(int i = 0; i < 10; i++){ itentity[ten[i]] = V + 100 + i; } vector<int> de; for(int i = 0; i < V; i++){ if(itentity[i] == -1){ itentity[i] = 0; for(int j : adjlst[i]){ if(itentity[j] >= V + 100){ itentity[i] += (1<<(itentity[j]-V-100)) ; } } de.push_back(itentity[i]); } } sort(de.begin(),de.end()); vector<pair<int,int>> edge; for(int i = 0; i < U; i++){ if(itentity[C[i]] < 0 || itentity[D[i]] < 0) continue; if(itentity[C[i]] >= V + 100 || itentity[D[i]] >= V + 100) continue; int a = lower_bound(de.begin(),de.end(),itentity[C[i]]) - de.begin(); int b = lower_bound(de.begin(),de.end(),itentity[D[i]]) - de.begin(); edge.push_back({a,b}); } InitMap( V - 12, edge.size()); for(pair<int,int> ii : edge) MakeMap(ii.first,ii.second); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...