답안 #726999

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
726999 2023-04-19T19:19:24 Z nishkarsh 수도 (JOI20_capital_city) C++14
41 / 100
381 ms 41800 KB
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pcc pair<char,char>
#define vi vector <int>
#define vl vector <ll>
#define sd(x) scanf("%d",&x)
#define slld(x) scanf("%lld",&x)
#define pd(x) printf("%d",x)
#define plld(x) printf("%lld",x)
#define pds(x) printf("%d ",x)
#define pllds(x) printf("%lld ",x)
#define pdn(x) printf("%d\n",x)
#define plldn(x) printf("%lld\n",x)
using namespace std;
ll powmod(ll base,ll exponent,ll mod){
	ll ans=1;
	if(base<0) base+=mod;
	while(exponent){
		if(exponent&1)ans=(ans*base)%mod;
		base=(base*base)%mod;
		exponent/=2;
	}
	return ans;
}
ll gcd(ll a, ll b){
	if(b==0) return a;
	else return gcd(b,a%b);
}
const int INF = 2e9;
const ll INFLL = 4e18;
const int upperlimit = 2e5+1;
const int mod = 1e9+7;
struct DirectedGraph{
	int n;
	vector<vector<int>> adj;
	vector<int> comp;
	vector<int> topsort;
	vector<bool> visited;
	vector<bool> marked;
	DirectedGraph(int _n){
		n = _n;
		adj.resize(n);
		comp.resize(n);
		visited.assign(n,false);
		marked.assign(n,false);
	}
	void add_edge(int &a,int &b){
		adj[a].pb(b);
	}
	void topsort_dfs(int node){
		visited[node] = true;
		for(int i : adj[node]) if(! visited[i]) topsort_dfs(i);
		topsort.pb(node);
	}
	void scc_dfs(int node, int &sz, bool &is_end, vi &node_list){
		sz++;
		node_list.pb(node);
		visited[node] = true;
		for(int i : adj[node]){
			if(marked[i]) is_end = false;
			else if(! visited[i]) scc_dfs(i,sz,is_end,node_list);
		}
	}
	int calculate_ans(){
		for(int i = 0; i < n; i++) if(! visited[i]) topsort_dfs(i);
		visited.assign(n,false);
		int ans = n,sz;
		bool is_end;
		vi node_list;
		for(int i : topsort){
			if(! marked[i]){
				sz = 0;
				is_end = true;
				node_list.clear();
				scc_dfs(i,sz,is_end,node_list);
				for(int j : node_list) marked[j] = true;
				if(is_end) ans = min(ans,sz);
			}
		}
		return ans;
	}
};
vi adj[upperlimit];
int par[upperlimit];
vi indices[upperlimit];
int etl[upperlimit];
int etr[upperlimit];
int c[upperlimit];
int node_cnt = 0;
void dfs(int node,int p){
	par[node] = p;
	indices[c[node]].pb(etl[node] = ++node_cnt);
	for(int i : adj[node]) if(i != p) dfs(i,node);
	etr[node] = node_cnt;
}
int main() {
	int n,k,a,b;
	cin >> n >> k;
	for(int i = 1; i < n; i++){
		cin >> a >> b;
		a--;b--;
		adj[a].pb(b);
		adj[b].pb(a);
	}
	for(int i = 0; i < n; i++){
		cin >> c[i];
		c[i]--;
	}
	DirectedGraph dg(k);
	dfs(0,-1);
	for(int i = 1; i < n; i++){
		if((indices[c[i]][0] < etl[i]) || (indices[c[i]].back() > etr[i])) dg.add_edge(c[i],c[par[i]]);
		if(lower_bound(indices[c[par[i]]].begin(),indices[c[par[i]]].end(),etl[i]) != upper_bound(indices[c[par[i]]].begin(),indices[c[par[i]]].end(),etr[i])) dg.add_edge(c[par[i]],c[i]);
	}
	cout << dg.calculate_ans() - 1;
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 9684 KB Output is correct
2 Correct 6 ms 9696 KB Output is correct
3 Correct 5 ms 9708 KB Output is correct
4 Correct 8 ms 9684 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 7 ms 9684 KB Output is correct
7 Correct 8 ms 9620 KB Output is correct
8 Correct 5 ms 9708 KB Output is correct
9 Correct 7 ms 9652 KB Output is correct
10 Correct 7 ms 9624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 9684 KB Output is correct
2 Correct 6 ms 9696 KB Output is correct
3 Correct 5 ms 9708 KB Output is correct
4 Correct 8 ms 9684 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 7 ms 9684 KB Output is correct
7 Correct 8 ms 9620 KB Output is correct
8 Correct 5 ms 9708 KB Output is correct
9 Correct 7 ms 9652 KB Output is correct
10 Correct 7 ms 9624 KB Output is correct
11 Correct 9 ms 9812 KB Output is correct
12 Correct 7 ms 9796 KB Output is correct
13 Correct 7 ms 9844 KB Output is correct
14 Correct 8 ms 9840 KB Output is correct
15 Correct 7 ms 9888 KB Output is correct
16 Correct 7 ms 9812 KB Output is correct
17 Correct 7 ms 9812 KB Output is correct
18 Correct 7 ms 9924 KB Output is correct
19 Correct 9 ms 9900 KB Output is correct
20 Correct 6 ms 9940 KB Output is correct
21 Correct 7 ms 9844 KB Output is correct
22 Correct 7 ms 9940 KB Output is correct
23 Correct 7 ms 9940 KB Output is correct
24 Correct 7 ms 9864 KB Output is correct
25 Correct 7 ms 9940 KB Output is correct
26 Correct 10 ms 9940 KB Output is correct
27 Correct 7 ms 9976 KB Output is correct
28 Correct 9 ms 9940 KB Output is correct
29 Correct 11 ms 9880 KB Output is correct
30 Correct 10 ms 9844 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 322 ms 41448 KB Output is correct
2 Correct 212 ms 41800 KB Output is correct
3 Correct 381 ms 41444 KB Output is correct
4 Correct 220 ms 41732 KB Output is correct
5 Correct 322 ms 39036 KB Output is correct
6 Correct 202 ms 41664 KB Output is correct
7 Correct 319 ms 38872 KB Output is correct
8 Correct 203 ms 40720 KB Output is correct
9 Correct 278 ms 36040 KB Output is correct
10 Correct 356 ms 34444 KB Output is correct
11 Correct 367 ms 36344 KB Output is correct
12 Correct 372 ms 37848 KB Output is correct
13 Correct 283 ms 34108 KB Output is correct
14 Correct 293 ms 38092 KB Output is correct
15 Correct 348 ms 38108 KB Output is correct
16 Correct 296 ms 34932 KB Output is correct
17 Correct 280 ms 35336 KB Output is correct
18 Correct 291 ms 35684 KB Output is correct
19 Correct 349 ms 37428 KB Output is correct
20 Correct 282 ms 38220 KB Output is correct
21 Correct 5 ms 9684 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 9684 KB Output is correct
2 Correct 6 ms 9696 KB Output is correct
3 Correct 5 ms 9708 KB Output is correct
4 Correct 8 ms 9684 KB Output is correct
5 Correct 5 ms 9684 KB Output is correct
6 Correct 7 ms 9684 KB Output is correct
7 Correct 8 ms 9620 KB Output is correct
8 Correct 5 ms 9708 KB Output is correct
9 Correct 7 ms 9652 KB Output is correct
10 Correct 7 ms 9624 KB Output is correct
11 Correct 9 ms 9812 KB Output is correct
12 Correct 7 ms 9796 KB Output is correct
13 Correct 7 ms 9844 KB Output is correct
14 Correct 8 ms 9840 KB Output is correct
15 Correct 7 ms 9888 KB Output is correct
16 Correct 7 ms 9812 KB Output is correct
17 Correct 7 ms 9812 KB Output is correct
18 Correct 7 ms 9924 KB Output is correct
19 Correct 9 ms 9900 KB Output is correct
20 Correct 6 ms 9940 KB Output is correct
21 Correct 7 ms 9844 KB Output is correct
22 Correct 7 ms 9940 KB Output is correct
23 Correct 7 ms 9940 KB Output is correct
24 Correct 7 ms 9864 KB Output is correct
25 Correct 7 ms 9940 KB Output is correct
26 Correct 10 ms 9940 KB Output is correct
27 Correct 7 ms 9976 KB Output is correct
28 Correct 9 ms 9940 KB Output is correct
29 Correct 11 ms 9880 KB Output is correct
30 Correct 10 ms 9844 KB Output is correct
31 Correct 322 ms 41448 KB Output is correct
32 Correct 212 ms 41800 KB Output is correct
33 Correct 381 ms 41444 KB Output is correct
34 Correct 220 ms 41732 KB Output is correct
35 Correct 322 ms 39036 KB Output is correct
36 Correct 202 ms 41664 KB Output is correct
37 Correct 319 ms 38872 KB Output is correct
38 Correct 203 ms 40720 KB Output is correct
39 Correct 278 ms 36040 KB Output is correct
40 Correct 356 ms 34444 KB Output is correct
41 Correct 367 ms 36344 KB Output is correct
42 Correct 372 ms 37848 KB Output is correct
43 Correct 283 ms 34108 KB Output is correct
44 Correct 293 ms 38092 KB Output is correct
45 Correct 348 ms 38108 KB Output is correct
46 Correct 296 ms 34932 KB Output is correct
47 Correct 280 ms 35336 KB Output is correct
48 Correct 291 ms 35684 KB Output is correct
49 Correct 349 ms 37428 KB Output is correct
50 Correct 282 ms 38220 KB Output is correct
51 Correct 5 ms 9684 KB Output is correct
52 Correct 291 ms 27132 KB Output is correct
53 Correct 287 ms 26956 KB Output is correct
54 Incorrect 324 ms 27040 KB Output isn't correct
55 Halted 0 ms 0 KB -