Submission #3217042
Source Code Expand
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; #define sqr(x) ((x)*(x)) #define mp make_pair #define uint unsigned inline char gc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++; } #define gc getchar inline ll read(){ ll x = 0; char ch = gc(); bool positive = 1; for (; !isdigit(ch); ch = gc()) if (ch == '-') positive = 0; for (; isdigit(ch); ch = gc()) x = x * 10 + ch - '0'; return positive ? x : -x; } inline void write(ll a){ if(a<0){ a=-a; putchar('-'); } if(a>=10)write(a/10); putchar('0'+a%10); } inline void writeln(ll a){write(a); puts("");} inline void wri(ll a){write(a); putchar(' ');} inline ull rnd(){ return ((ull)rand()<<30^rand())<<4|rand()%4; } const int N=1<<17|3; struct PI{ ll in,out; }; inline PI mp(ll a,ll b){ return (PI){a,b}; } bool operator < (PI a,PI b){ return a.in<b.in; } int n,ch[N][2]; ll dep[N],lim; vector<PI> dp[N]; vector<PI> Merge(vector<PI> &a,vector<PI> &b){ vector<PI> v,ans; v.clear(); ans.clear(); v.resize(a.size()+b.size()); merge(a.begin(),a.end(),b.begin(),b.end(),v.begin()); for(auto i:v)if(ans.size()==0||i.out<ans[ans.size()-1].out)ans.push_back(i); return ans; } vector<PI> Merge(ll lim,vector<PI> &a,vector<PI> &b){ vector<PI> v; v.clear(); if(!a.size()||!b.size())return v; unsigned j=0; for(auto i:a){ while(j+1<b.size()&&b[j+1].in+i.out<=lim)j++; //if(lim==23)cout<<i.in<<"dasfas "<<b[j].out<<endl; if(b[j].in+i.out<=lim)v.push_back(mp(i.in,b[j].out)); } return v; } void solve(int p){ if(!ch[p][0]){ dp[p].push_back(mp(dep[p],dep[p])); return; } solve(ch[p][0]); solve(ch[p][1]); vector<PI> tmp1=Merge(lim+dep[p]*2,dp[ch[p][0]],dp[ch[p][1]]); vector<PI> tmp2=Merge(lim+dep[p]*2,dp[ch[p][1]],dp[ch[p][0]]); dp[p]=Merge(tmp1,tmp2); //cout<<p<<" cqz "<<dp[p].size()<<endl; //for(auto i:dp[p])cout<<i.in<<" "<<i.out<<endl; } bool check(){ solve(1); if(dp[1].size())return 1; //for(auto i:dp[1])if(i.in+i.out<=lim)return 1; return 0; } int main(){ n=read(); for(int i=2;i<=n;i++){ int fa=read(),v=read(); dep[i]=dep[fa]+v; if(ch[fa][0])ch[fa][1]=i; else ch[fa][0]=i; } //lim=15; cout<<check()<<endl; return 0; ll l=0,r=((ll)1<<34)-10; while(l<r){ lim=(l+r)>>1; if(check())r=lim; else l=lim+1; } cout<<l<<endl; }
Submission Info
Submission Time | |
---|---|
Task | E - Shik and Travel |
User | wzp |
Language | C++14 (GCC 5.4.1) |
Score | 1400 |
Code Size | 2464 Byte |
Status | AC |
Exec Time | 2149 ms |
Memory | 93608 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 1400 / 1400 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | example0.txt, example1.txt, example2.txt, example3.txt |
All | 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, 043.txt, 044.txt, 045.txt, 046.txt, 047.txt, 048.txt, 049.txt, example0.txt, example1.txt, example2.txt, example3.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
000.txt | AC | 28 ms | 5504 KB |
001.txt | AC | 29 ms | 5504 KB |
002.txt | AC | 28 ms | 5504 KB |
003.txt | AC | 28 ms | 5504 KB |
004.txt | AC | 28 ms | 5504 KB |
005.txt | AC | 29 ms | 5504 KB |
006.txt | AC | 28 ms | 5504 KB |
007.txt | AC | 28 ms | 5504 KB |
008.txt | AC | 29 ms | 5504 KB |
009.txt | AC | 28 ms | 5504 KB |
010.txt | AC | 1892 ms | 77824 KB |
011.txt | AC | 1922 ms | 77824 KB |
012.txt | AC | 1872 ms | 77824 KB |
013.txt | AC | 1855 ms | 77824 KB |
014.txt | AC | 1925 ms | 77824 KB |
015.txt | AC | 1917 ms | 77824 KB |
016.txt | AC | 1906 ms | 77824 KB |
017.txt | AC | 1889 ms | 77824 KB |
018.txt | AC | 1908 ms | 77824 KB |
019.txt | AC | 1931 ms | 77696 KB |
020.txt | AC | 1906 ms | 77824 KB |
021.txt | AC | 1925 ms | 77824 KB |
022.txt | AC | 1927 ms | 77824 KB |
023.txt | AC | 1915 ms | 77824 KB |
024.txt | AC | 1897 ms | 77952 KB |
025.txt | AC | 1910 ms | 77824 KB |
026.txt | AC | 1768 ms | 77184 KB |
027.txt | AC | 1912 ms | 77824 KB |
028.txt | AC | 1768 ms | 77184 KB |
029.txt | AC | 1821 ms | 77056 KB |
030.txt | AC | 1833 ms | 77440 KB |
031.txt | AC | 1838 ms | 77952 KB |
032.txt | AC | 1821 ms | 77952 KB |
033.txt | AC | 1847 ms | 77440 KB |
034.txt | AC | 1828 ms | 77440 KB |
035.txt | AC | 1866 ms | 77952 KB |
036.txt | AC | 1815 ms | 77440 KB |
037.txt | AC | 1798 ms | 76928 KB |
038.txt | AC | 1819 ms | 77440 KB |
039.txt | AC | 1502 ms | 76288 KB |
040.txt | AC | 2093 ms | 93144 KB |
041.txt | AC | 2149 ms | 93608 KB |
042.txt | AC | 2139 ms | 93584 KB |
043.txt | AC | 2112 ms | 93524 KB |
044.txt | AC | 1648 ms | 82560 KB |
045.txt | AC | 1838 ms | 78976 KB |
046.txt | AC | 1700 ms | 80000 KB |
047.txt | AC | 1842 ms | 79232 KB |
048.txt | AC | 1851 ms | 81408 KB |
049.txt | AC | 3 ms | 4352 KB |
example0.txt | AC | 3 ms | 4352 KB |
example1.txt | AC | 3 ms | 4352 KB |
example2.txt | AC | 3 ms | 4352 KB |
example3.txt | AC | 3 ms | 4352 KB |