제출 #1354860

#제출 시각아이디문제언어결과실행 시간메모리
1354860thelegendary08수도 (JOI20_capital_city)C++17
0 / 100
201 ms47356 KiB
#include<bits/stdc++.h>
#define int long long
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define F first
#define S second
#define vi vector<int>
#define pii pair<int,int>
#define f0r(i,n) for(int i = 0; i < n; i++)
#define FOR(i,k,n) for(int i = k; i < n; i++)
#define dout(x) cout<<x<<' '<<#x<<endl
#define dout2(x,y) cout<<x<<' '<<#x<<' '<<y<<' '<<#y<<endl
using namespace std; 
const int mxn = 2e5 + 5; 
int n, k, deg[mxn], c[mxn]; vi adj[mxn]; vi p; mt19937 rng(1911); 
void dfs(int node, int from){
	p.pb(node); for(auto u : adj[node])if(u!=from)dfs(u,node);
}
signed main(){
	ios::sync_with_stdio(false); cin.tie(NULL); 
	cin>>n>>k; f0r(i,n-1){int a, b; cin>>a>>b; a--; b--; adj[a].pb(b); adj[b].pb(a); deg[a]++; deg[b]++;} f0r(i,n)cin>>c[i],c[i]--;
	int d = 0; f0r(i,n)if(deg[i]==1)d=i; dfs(d,-1); vi w; for(auto u : p)w.pb(c[u]); 
	vi mx(n,-1e9), mn(n,1e9); f0r(i,n)mx[w[i]] = i, mn[w[i]] = min(mn[w[i]],i); f0r(i,n)if(mx[i]==mn[i]){cout<<0; return 0;}
	vector<pii>g; f0r(i,n)if(mx[i]!=-1e9)g.eb(mn[i],i),g.eb(mx[i],i); sort(g.begin(),g.end()); 
	vi v; for(auto [a,b] : g)v.pb(b); vi h(n); f0r(i,n)h[i] = rng() % (int)(1e18 + 1911); 
	vi pref(v.size()+1); FOR(i,1,v.size()+1)pref[i] = pref[i-1] ^ h[v[i-1]]; map<int,int>m; 
	int ans = 1e9; f0r(i,v.size()+1){
		if(m.count(pref[i]))ans = min(ans, i - m[pref[i]]); 
		m[pref[i]] = i; 	
	} ans /= 2; ans--; cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...