Submission #257690

# Submission time Handle Problem Language Result Execution time Memory
257690 2020-08-04T14:43:03 Z igm_igm Mag (COCI16_mag) C++14
120 / 120
667 ms 250768 KB
#include <bits/stdc++.h>
using namespace std;
typedef int64_t llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
#define all(x) x.begin(),x.end()
void setIO(string s){
	freopen((s+".in").c_str(),"r",stdin);
	freopen((s+".out").c_str(),"w",stdout);
}

pair<llo,llo> ans;
vector<llo> adj[1000001];
vector<pair<llo,llo>> kk[1000001];
llo it[1000001];
llo dp[1000001];
llo n;
void remin(pair<llo,llo> xx){
	llo yo=__gcd(xx.a,xx.b);
	xx.a/=yo;
	xx.b/=yo;
	if(xx.a*ans.b<xx.b*ans.a){
		ans=xx;
	}
}
void dfs(llo no,llo par=-1,llo co=0){
	co+=1;
	if(it[no]>1){
		co=0;
	}
	llo ma=0;
	for(auto j:adj[no]){
		if(j==par){
			continue;
		}
		dfs(j,no,co);
		ma=max(ma,dp[j]);
		kk[no].pb({dp[j],j});
	}
	sort(all(kk[no]));
	reverse(all(kk[no]));
	llo cc=0;
	for(llo i=0;i<kk[no].size();i++){
		if(i==2){
			break;
		}
		cc+=kk[no][i].a;
	}
	remin({it[no],1+cc});
	if(it[no]==1){
		dp[no]=ma+1;
	}
}
void dfs2(llo no,llo par=-1,llo co=0){
	llo kp=co+1;
	if(kk[no].size()){
		kp+=kk[no][0].a;
	}
	remin({it[no],kp});
	if(it[no]==1){
		co+=1;
	}
	else{
		co=0;
	}
	llo ma=0;
	for(auto j:adj[no]){
		if(j==par){
			continue;
		}
		llo se=0;
		if(it[no]==1){
			se=max(se,co);
			llo su=1;
			for(int i=0;i<2;i++){
				if(i==kk[no].size()){
					break;
				}
				if(kk[no][i].b==j){
					continue;
				}
				su+=kk[no][i].a;
				break;
			}
			se=max(se,su);
		}
		dfs2(j,no,se);
	}


}




int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n;
	for(llo i=0;i<n-1;i++){
		llo aa,bb;
		cin>>aa>>bb;
		aa--;
		bb--;
		adj[aa].pb(bb);
		adj[bb].pb(aa);
	}
	for(llo i=0;i<n;i++){
		cin>>it[i];
	}
	ans={it[0],1};
	dfs(0);
	dfs2(0);
	cout<<ans.a<<"/"<<ans.b<<endl;



	return 0;
}

Compilation message

mag.cpp: In function 'void dfs(llo, llo, llo)':
mag.cpp:46:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(llo i=0;i<kk[no].size();i++){
              ~^~~~~~~~~~~~~~
mag.cpp: In function 'void dfs2(llo, llo, llo)':
mag.cpp:79:9: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if(i==kk[no].size()){
        ~^~~~~~~~~~~~~~~
mag.cpp:69:6: warning: unused variable 'ma' [-Wunused-variable]
  llo ma=0;
      ^~
mag.cpp: In function 'void setIO(std::__cxx11::string)':
mag.cpp:11:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
  freopen((s+".in").c_str(),"r",stdin);
  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mag.cpp:12:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
  freopen((s+".out").c_str(),"w",stdout);
  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 32 ms 47360 KB Output is correct
2 Correct 28 ms 47352 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 32 ms 47360 KB Output is correct
2 Correct 28 ms 47356 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 497 ms 160120 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 32 ms 47352 KB Output is correct
2 Correct 641 ms 250596 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 623 ms 245844 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 531 ms 125184 KB Output is correct
2 Correct 404 ms 104788 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 641 ms 122328 KB Output is correct
2 Correct 131 ms 55160 KB Output is correct
3 Correct 667 ms 250768 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 134 ms 55164 KB Output is correct
2 Correct 587 ms 126056 KB Output is correct
3 Correct 536 ms 86648 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 545 ms 119140 KB Output is correct
2 Correct 582 ms 123892 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 575 ms 126508 KB Output is correct
2 Correct 512 ms 86776 KB Output is correct