Submission #47643

# Submission time Handle Problem Language Result Execution time Memory
47643 2018-05-06T07:10:25 Z WA_TLE Beads and wires (APIO14_beads) C++14
100 / 100
392 ms 22380 KB
#include<deque>
#include<queue>
#include<vector>
#include<algorithm>
#include<iostream>
#include<set>
#include<cmath>
#include<tuple>
#include<string>
#include<chrono>
#include<functional>
#include<iterator>
#include<random>
#include<unordered_set>
#include<array>
#include<map>
#include<iomanip>
#include<assert.h>
using namespace std;
typedef long long int llint;
typedef long double lldo;
#define mp make_pair
#define mt make_tuple
#define pub push_back
#define puf push_front
#define pob pop_back
#define pof pop_front
#define fir first
#define sec second
#define res resize
#define ins insert
#define era erase
//cout<<setprecision(20)
//cin.tie(0);
//ios::sync_with_stdio(false);
const llint mod=1000000007;
const llint big=2.19e15+1;
const long double pai=3.141592653589793238462643383279502884197;
const long double eps=1e-15;
template <class T,class U>void mineq(T& a,U b){if(a>b){a=b;}}
template <class T,class U>void maxeq(T& a,U b){if(a<b){a=b;}}
llint gcd(llint a,llint b){if(a%b==0){return b;}else return gcd(b,a%b);}
llint lcm(llint a,llint b){return a/gcd(a,b)*b;}
template<class T> void SO(T& ve){sort(ve.begin(),ve.end());}
template<class T> void REV(T& ve){reverse(ve.begin(),ve.end());}
int LBI(vector<int>&ar,llint in){return lower_bound(ar.begin(),ar.end(),in)-ar.begin();}
int UBI(vector<int>&ar,llint in){return upper_bound(ar.begin(),ar.end(),in)-ar.begin();}
vector<vector<pair<int,llint>>>go;//行先,長さ
vector<pair<llint,llint>>dp;
llint ans=0;
pair<llint,llint>solve(int ter,int per){
	llint ml=-big,fans=0,fsa=-big;
	for(auto it:go[ter]){
		if(it.fir==per){ml=it.sec;continue;}
		auto ret=solve(it.fir,ter);
		fans+=ret.fir;
		maxeq(fsa,ret.sec);
	}
	//現在のスコア,上を使うことによるマイナスプラス値
	llint fhos=max(0LL,ml+fsa);
	dp[ter]=mp(fans+fhos,ml-fhos);
	return dp[ter];
}
void resol(int ter,int per,llint oans,llint osa){
	llint ml=-big,fans=0;
	pair<llint,int> rsa=mp(-big,-1),rsb=mp(-big,-2);
	for(auto it:go[ter]){
		pair<llint,llint>ret;
		if(it.fir==per){ret=mp(oans,osa);}
		else{ret=dp[it.fir];}
		fans+=ret.fir;
		pair<llint,int>rnow=mp(ret.sec,it.fir);
		if(rsb<rnow){rsb=rnow;}
		if(rsa<rsb){swap(rsa,rsb);}
	}
	maxeq(ans,fans);
	//現在のスコア,上を使うことによるマイナスプラス値
	for(auto it:go[ter]){
		if(it.fir==per){continue;}
		llint fhos=0;
		if(it.fir==rsa.sec){maxeq(fhos,it.sec+rsb.fir);}
		else{maxeq(fhos,it.sec+rsa.fir);}
		resol(it.fir,ter,fans-dp[it.fir].fir+fhos,it.sec-fhos);
	}
}

int main(void){
	int n;cin>>n;
	//if(n>10000){return 0;}
	go.res(n);dp.res(n);
	for(int i=1;i<n;i++){
		int a,b;llint c;
		cin>>a>>b>>c;a--;b--;
		go[a].pub(mp(b,c));
		go[b].pub(mp(a,c));
	}
	solve(0,-1);
	resol(0,-1,0,0);
	cout<<ans<<endl;
	return 0;
}

Compilation message

beads.cpp: In function 'void resol(int, int, llint, llint)':
beads.cpp:65:8: warning: unused variable 'ml' [-Wunused-variable]
  llint ml=-big,fans=0;
        ^~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 256 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 2 ms 384 KB Output is correct
11 Correct 2 ms 384 KB Output is correct
12 Correct 2 ms 256 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 256 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 2 ms 384 KB Output is correct
11 Correct 2 ms 384 KB Output is correct
12 Correct 2 ms 256 KB Output is correct
13 Correct 2 ms 384 KB Output is correct
14 Correct 2 ms 256 KB Output is correct
15 Correct 2 ms 256 KB Output is correct
16 Correct 2 ms 384 KB Output is correct
17 Correct 2 ms 384 KB Output is correct
18 Correct 7 ms 384 KB Output is correct
19 Correct 2 ms 384 KB Output is correct
20 Correct 2 ms 384 KB Output is correct
21 Correct 3 ms 384 KB Output is correct
22 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 256 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 2 ms 384 KB Output is correct
11 Correct 2 ms 384 KB Output is correct
12 Correct 2 ms 256 KB Output is correct
13 Correct 2 ms 384 KB Output is correct
14 Correct 2 ms 256 KB Output is correct
15 Correct 2 ms 256 KB Output is correct
16 Correct 2 ms 384 KB Output is correct
17 Correct 2 ms 384 KB Output is correct
18 Correct 7 ms 384 KB Output is correct
19 Correct 2 ms 384 KB Output is correct
20 Correct 2 ms 384 KB Output is correct
21 Correct 3 ms 384 KB Output is correct
22 Correct 2 ms 384 KB Output is correct
23 Correct 7 ms 768 KB Output is correct
24 Correct 7 ms 796 KB Output is correct
25 Correct 7 ms 768 KB Output is correct
26 Correct 13 ms 1280 KB Output is correct
27 Correct 12 ms 1280 KB Output is correct
28 Correct 22 ms 1276 KB Output is correct
29 Correct 12 ms 1152 KB Output is correct
30 Correct 12 ms 1152 KB Output is correct
31 Correct 14 ms 1536 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
3 Correct 2 ms 256 KB Output is correct
4 Correct 2 ms 384 KB Output is correct
5 Correct 2 ms 384 KB Output is correct
6 Correct 2 ms 256 KB Output is correct
7 Correct 2 ms 384 KB Output is correct
8 Correct 2 ms 256 KB Output is correct
9 Correct 3 ms 384 KB Output is correct
10 Correct 2 ms 384 KB Output is correct
11 Correct 2 ms 384 KB Output is correct
12 Correct 2 ms 256 KB Output is correct
13 Correct 2 ms 384 KB Output is correct
14 Correct 2 ms 256 KB Output is correct
15 Correct 2 ms 256 KB Output is correct
16 Correct 2 ms 384 KB Output is correct
17 Correct 2 ms 384 KB Output is correct
18 Correct 7 ms 384 KB Output is correct
19 Correct 2 ms 384 KB Output is correct
20 Correct 2 ms 384 KB Output is correct
21 Correct 3 ms 384 KB Output is correct
22 Correct 2 ms 384 KB Output is correct
23 Correct 7 ms 768 KB Output is correct
24 Correct 7 ms 796 KB Output is correct
25 Correct 7 ms 768 KB Output is correct
26 Correct 13 ms 1280 KB Output is correct
27 Correct 12 ms 1280 KB Output is correct
28 Correct 22 ms 1276 KB Output is correct
29 Correct 12 ms 1152 KB Output is correct
30 Correct 12 ms 1152 KB Output is correct
31 Correct 14 ms 1536 KB Output is correct
32 Correct 68 ms 4904 KB Output is correct
33 Correct 71 ms 4852 KB Output is correct
34 Correct 75 ms 4856 KB Output is correct
35 Correct 392 ms 18424 KB Output is correct
36 Correct 374 ms 18556 KB Output is correct
37 Correct 362 ms 18564 KB Output is correct
38 Correct 274 ms 17760 KB Output is correct
39 Correct 280 ms 17740 KB Output is correct
40 Correct 286 ms 17624 KB Output is correct
41 Correct 367 ms 22380 KB Output is correct