Submission #365899

#TimeUsernameProblemLanguageResultExecution timeMemory
365899negar_aCapital City (JOI20_capital_city)C++14
0 / 100
684 ms34540 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define pb push_back #define mp make_pair #define pii pair <int, int> #define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define F first #define S second const int maxn = 2e5 + 5; vector <int> adj[maxn], vec[maxn]; int sz[maxn], par[maxn], c[maxn]; int ans = 1e9 + 10; bool cent[maxn], mark[maxn], com[maxn], visit[maxn]; void dfs(int v, int p = -1){ sz[v] = 1; com[v] = true; for(int u : adj[v]){ if(!cent[u] && u != p){ dfs(u, v); sz[v] += sz[u]; } } } int find_centroid(int v, int s, int p = -1){ for(int u : adj[v]){ if(!cent[u] && u != p && sz[u] * 2 > s){ return find_centroid(u, s, v); } } return v; } void dfs2(int v, int p = -1){ for(int u : adj[v]){ if(!cent[u] && u != p){ par[u] = v; dfs2(u, v); } } } void clean(int v, int p = -1){ com[v] = par[v] = sz[v] = 0; for(int u : adj[v]){ if(u != p && !cent[u]) clean(u, v); } } void solve(int v){ dfs(v); int cn = find_centroid(v, sz[v]); // cout << "cen : " << cn << endl; par[cn] = -1; dfs2(cn); queue <int> q; vector <int> vc; q.push(c[cn]); bool flag = true; mark[c[cn]] = true; while(q.size() && flag){ int x = q.front(); q.pop(); vc.pb(x); if(visit[c[x]]){ flag = false; break; } for(int u : vec[x]){ if(!com[u]){ flag = false; break; } if(par[u] != -1 && !mark[c[par[u]]]){ if(!com[par[u]]){ flag = false; break; } q.push(c[par[u]]); mark[c[par[u]]] = true; } if(!flag) break; } } if(flag){ ans = min(ans, (int)vc.size() - 1); } //clear for(int u : vc){ mark[u] = false; visit[u] = true; } clean(v); cent[cn] = true; for(int u : adj[cn]){ if(!cent[u]){ solve(u); } } } int main(){ fast_io; int n, k; cin >> n >> k; for(int i = 0; i < n - 1; i ++){ int x, y; cin >> x >> y; x --; y --; adj[x].pb(y); adj[y].pb(x); } for(int i = 0; i < n; i ++){ cin >> c[i]; vec[c[i]].pb(i); } solve(0); cout << 0; return 0; }

Compilation message (stderr)

capital_city.cpp: In function 'void clean(int, int)':
capital_city.cpp:46:18: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   46 |  com[v] = par[v] = sz[v] = 0;
      |           ~~~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...