제출 #167561

#제출 시각아이디문제언어결과실행 시간메모리
167561puppies_and_rainbowsMag (COCI16_mag)C++14
24 / 120
1656 ms155236 KiB
#include <bits/stdc++.h>

using namespace std;
int n;
vector<int> adj[1000005];
int cac[1000005];
int a[1000005];
int ans=0;
bool hv=false;

void dfs(int node, int fa)
{
	pair<int, int> ok={0, 0};
	for(auto i:adj[node])
	{
		if(i==fa) continue;
		dfs(i, node);
		if(cac[i]>=ok.first)
		{
			ok.second=ok.first;
			ok.first=cac[i];
		}
		else if(cac[i]>ok.second)
		{
			ok.second=cac[i];
		}
	}
	if(a[node]==1)
	{
		ans=max(ans, ok.first+ok.second+1);
		cac[node]=ok.first+1;
	}
	ans=max(ans, cac[node]);
}

signed main()
{
	cin>>n;
	for(int i=1; i<n; i++)
	{
		int u, v;
		cin>>u>>v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	for(int i=1; i<=n; i++)
	{
		cin>>a[i];
		if(a[i]==1) hv=true;
	}
	if(!hv)
	{
		cout<<*min_element(a+1, a+n+1)<<"/1";
		return 0;
	}
	dfs(1, 1);
	cout<<"1/"<<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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...