제출 #1011693

#제출 시각아이디문제언어결과실행 시간메모리
1011693u_suck_oSplit the Attractions (IOI19_split)C++17
40 / 100
58 ms26320 KiB
#include "bits/stdc++.h" #include "split.h" #define MAXN 200005 using namespace std; int N; bool vis[MAXN], vis1[MAXN]; int sz[MAXN], color[MAXN]; vector<int> adj[MAXN]; vector<int> nadj[MAXN]; vector<pair<int, int>> v; bool found = false; int cnt, q; void ass1(int node, int num, int par) { if (cnt >= q) return; color[node] = num; cnt++; vis1[node] = true; for (int j : nadj[node]) { if (j != par && !vis1[j]) ass1(j, num, node); } } void ass2(int node, int num, int par) { if (cnt >= q) return; color[node] = num; cnt++; vis1[node] = true; for (int j : adj[node]) { if (j != par && !vis1[j]) ass2(j, num, node); } } void dfs(int node, int par) { if (found) return; if (par != -1) { nadj[par].push_back(node); nadj[node].push_back(par); } sz[node] = 1; vis[node] = true; for (int j : adj[node]) { if (!vis[j]) { dfs(j, node); if (found) return; sz[node] += sz[j]; } } if (found) return; if (sz[node] >= v[0].first && N-sz[node] >= v[1].first) { found = true; cnt = 0; q = v[0].first; ass1(node, v[0].second, par); cnt = 0; q = v[1].first; ass2(par, v[1].second, node); } else if (sz[node] >= v[1].first && N-sz[node] >= v[0].first) { found = true; cnt = 0; q = v[1].first; ass1(node, v[1].second, par); cnt = 0; q = v[0].first; ass2(par, v[0].second, node); } } vector<int> find_split(int n, int a, int b, int c, vector<int> p, vector<int> q) { N = n; v.push_back({a, 1}); v.push_back({b, 2}); v.push_back({c, 3}); sort(v.begin(), v.end()); vector<int> res; for (int i = 0; i < p.size(); i++) { adj[p[i]].push_back(q[i]); adj[q[i]].push_back(p[i]); } /*for (int i = 0; i < n; i++) { if (!found) { memset(vis, 0, sizeof vis); memset(sz, 0, sizeof sz); dfs(i, -1); } }*/ memset(vis, 0, sizeof vis); memset(sz, 0, sizeof sz); dfs(0, -1); if (!found) return vector<int>(n, 0); for (int i = 0; i < n; i++) { if (color[i] == 0) res.push_back(v[2].second); else res.push_back(color[i]); } return res; }

컴파일 시 표준 에러 (stderr) 메시지

split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:85:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |     for (int i = 0; i < p.size(); i++) {
      |                     ~~^~~~~~~~~~
#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...