Submission #1194246

#TimeUsernameProblemLanguageResultExecution timeMemory
1194246yellowtoadAirline Route Map (JOI18_airline)C++20
0 / 100
164 ms19348 KiB
#include "Alicelib.h" #include <iostream> #include <cassert> #include <cstdio> #include <vector> #define f first #define s second using namespace std; void Alice( int n, int m, int A[], int B[] ) { vector<pair<int,int>> edge; for (int i = 0; i < m; i++) edge.push_back({A[i],B[i]}); for (int i = n; i < n+10; i++) for (int j = 0; j < n; j++) if ((j&(1<<(i-n))) > 0) edge.push_back({i,j}); for (int i = n; i < n+10; i++) edge.push_back({n+10,i}); for (int i = 0; i < n+10; i++) edge.push_back({n+11,i}); edge.push_back({n,n+1}); edge.push_back({n,n+2}); edge.push_back({n+2,n+3}); edge.push_back({n,n+4}); for (int i = n+4; i < n+9; i++) edge.push_back({i,i+1}); InitG(n+12,edge.size()); for (int i = 0; i < edge.size(); i++) MakeG(i,edge[i].f,edge[i].s); }
#include "Boblib.h" #include <iostream> #include <cassert> #include <cstdio> #include <vector> #define f first #define s second using namespace std; vector<int> edge[1010]; vector<pair<int,int>> ans; int p[1010], d[1010]; void dfs(int u, int v) { for (int i = 0; i < edge[u].size(); i++) if ((edge[u][i] != v) && (p[edge[u][i]] == -1)) dfs(edge[u][i],u), d[u] = d[edge[u][i]]+1; } void dfs2(int u, int cnt) { p[u] = cnt; for (int i = 0; i < edge[u].size(); i++) if (p[edge[u][i]] == -1) dfs2(edge[u][i],cnt+1); } void Bob( int n, int m, int C[], int D[] ) { pair<int,int> maxx; for (int i = 0; i < m; i++) edge[C[i]].push_back(D[i]), edge[D[i]].push_back(C[i]); for (int i = 0; i < n; i++) { if (edge[i].size() == n-2) { p[i] = n-1; for (int j = 0; j < n-1; j++) if (j != i) p[j] = n-2; for (int j = 0; j < edge[i].size(); j++) p[edge[i][j]] = 0; break; } } for (int i = 0; i < n; i++) { if (p[i] == n-2) { for (int j = 0; j < edge[i].size(); j++) p[edge[i][j]] = -1; for (int j = 0; j < n; j++) { if (p[j] == -1) { int cnt = 0; for (int k = 0; k < edge[j].size(); k++) if (p[edge[j][k]] == -1) cnt++; maxx = max(maxx,{cnt,j}); } } p[maxx.s] = n-12; dfs(maxx.s,-1); for (int j = 0; j < edge[maxx.s].size(); j++) { int u = edge[maxx.s][j]; if (p[u] == -1) { if (d[u] == 0) { p[u] = n-11; } else if (d[u] == 1) { dfs2(u,n-10); } else { dfs2(u,n-8); } } } break; } } for (int i = 0; i < n; i++) { if ((n-12 <= p[i]) && (p[i] < n-2)) { for (int j = 0; j < edge[i].size(); j++) { if (n-12 <= p[edge[i][j]]) continue; p[edge[i][j]] += (1<<(p[i]-(n-12))); } } } for (int i = 0; i < m; i++) if ((p[C[i]] < n-12) && (p[D[i]] < n-12)) ans.push_back({p[C[i]],p[D[i]]}); InitMap(n-12,ans.size()); for (int i = 0; i < ans.size(); i++) MakeMap(ans[i].f,ans[i].s); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...