Submission #27126

#TimeUsernameProblemLanguageResultExecution timeMemory
27126RayaBurong25_1Amusement Park (JOI17_amusement_park)C++14
0 / 100
1652 ms212120 KiB
#include <stdio.h> #include "Joi.h" #include <vector> #include <set> #define SZ 60 static std::vector<int> AdjList[10005]; static std::set<int> Set[10005]; static int Vis[10005]; static int Role[10005]; static void FirstSet(int u, int pa) { if (Set[0].size() < SZ) { Role[u] = Set[0].size(); Set[0].insert(u); } int i, v, s = AdjList[u].size(); Vis[u] = 1; for (i = 0; i < s; i++) { v = AdjList[u][i]; if (v != pa && !Vis[v]) { FirstSet(v, u); } } } static void OtherSet(int u, int pa) { int i, j, v, s, d; if (u != 0) { Set[u] = Set[pa]; if (Set[u].find(u) == Set[u].end()) { std::set<int>::iterator it; for (it = Set[u].begin(); it != Set[u].end(); it++) { if (*it == pa) continue; s = AdjList[*it].size(); d = 0; for (j = 0; j < s; j++) { if (Set[*it].find(AdjList[*it][j]) != Set[*it].end()) d++; } if (d == 1) break; } if (it != Set[u].end()) { Role[u] = Role[*it]; Set[u].erase(it); } Set[u].insert(u); } } s = AdjList[u].size(); for (i = 0; i < s; i++) { v = AdjList[u][i]; if (v != pa && Set[v].size() == 0) { OtherSet(v, u); } } } void Joi(int N, int M, int A[], int B[], long long X, int T) { int i; for (i = 0; i < M; i++) { AdjList[A[i]].push_back(B[i]); AdjList[B[i]].push_back(A[i]); } FirstSet(0, -1); // printf("FirstSet fin\n"); OtherSet(0, -1); int val[SZ]; for (i = 0; i < SZ; i++) { val[i] = X%2; X >>= 1; } for (i = 0; i < N; i++) { MessageBoard(i, val[Role[i]]); } // printf("Joi fin\n"); }
#include <stdio.h> #include "Ioi.h" #include <vector> #include <set> #define SZ 60 static std::vector<int> AdjList[10005]; static std::set<int> Set[10005]; static int Vis[10005]; static int Role[10005]; static void FirstSet(int u, int pa) { if (Set[0].size() < SZ) { Role[u] = Set[0].size(); Set[0].insert(u); } int i, v, s = AdjList[u].size(); Vis[u] = 1; for (i = 0; i < s; i++) { v = AdjList[u][i]; if (v != pa && !Vis[v]) { FirstSet(v, u); } } } static void OtherSet(int u, int pa) { int i, j, v, s, d; if (u != 0) { Set[u] = Set[pa]; if (Set[u].find(u) == Set[u].end()) { std::set<int>::iterator it; for (it = Set[u].begin(); it != Set[u].end(); it++) { if (*it == pa) continue; s = AdjList[*it].size(); d = 0; for (j = 0; j < s; j++) { if (Set[*it].find(AdjList[*it][j]) != Set[*it].end()) d++; } if (d == 1) break; } if (it != Set[u].end()) { Role[u] = Role[*it]; Set[u].erase(it); } Set[u].insert(u); } } s = AdjList[u].size(); for (i = 0; i < s; i++) { v = AdjList[u][i]; if (v != pa && Set[v].size() == 0) { OtherSet(v, u); } } } static int val[SZ]; void GetVal(int P, int u, int pa) { int i, v, s = AdjList[u].size(); for (i = 0; i < s; i++) { v = AdjList[u][i]; if (v != pa && !Vis[v] && Set[P].find(v) != Set[P].end()) { val[Role[v]] = Move(v); GetVal(P, v, u); Move(u); } } } long long Ioi(int N, int M, int A[], int B[], int P, int V, int T) { int i; for (i = 0; i < M; i++) { AdjList[A[i]].push_back(B[i]); AdjList[B[i]].push_back(A[i]); } FirstSet(0, -1); OtherSet(0, -1); val[P] = V; for (i = 0; i < N; i++) Vis[i] = 0; GetVal(P, P, -1); long long X = 0; for (i = SZ - 1; i >= 0; i--) { X <<= 1; X += val[i]; } return X; }
#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...