제출 #189127

#제출 시각아이디문제언어결과실행 시간메모리
189127MvCTug of War (BOI15_tug)C++11
100 / 100
1637 ms6392 KiB
#pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> #define rc(x) return cout<<x<<endl,0 #define pb push_back #define mkp make_pair #define in insert #define er erase #define fd find #define fr first #define sc second typedef long long ll; typedef long double ld; const ll INF=0x3f3f3f3f3f3f3f3f; const ll llinf=(1LL<<62); const int inf=(1<<30); const int nmax=6e4+50; const int mmax=1e6+50; const int mod=1e9+7; using namespace std; int n,k,l[nmax],r[nmax],s[nmax],i,vl[nmax],cur,x,y,sa,sb,nx[nmax],j; vector<int>g[nmax],vc,vec; bitset<nmax>b; bitset<mmax>f; int dfs(int x) { for(int i=0;i<(int)g[x].size();i++) { int y=g[x][i]; if(b[y])continue; b[y]=1; if(!vl[y] || dfs(vl[y])) { vl[y]=x; return 1; } } return 0; } int main() { //freopen("sol.in","r",stdin); //freopen("sol.out","w",stdout); //mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0); cin>>n>>k; for(i=1;i<=2*n;i++) { cin>>l[i]>>r[i]>>s[i]; r[i]+=n; g[i].pb(l[i]); g[i].pb(r[i]); } for(i=1;i<=2*n;i++) { b.reset(); if(!dfs(i))rc("NO"); } for(i=1;i<=n;i++)nx[i]=r[vl[i]],sa+=s[vl[i]]; for(i=n+1;i<=2*n;i++)nx[i]=l[vl[i]],sb+=s[vl[i]]; cur=sa-sb; b.reset(); for(i=1;i<=2*n;i++) { if(b[i])continue; x=i,sa=sb=0,vec.clear(); while(!b[x]) { vec.pb(x); b[x]=1; x=nx[x]; } for(j=(int)vec.size()-1;j>=0;j--) { if(vec[j]<=n)sa+=s[vl[vec[j]]]; else sb+=s[vl[vec[j]]]; if(vec[j]==x)break; } //assert((ld)clock()/CLOCKS_PER_SEC<=1.2); if(j==-1)continue; if(2*(sb-sa)>0) { cur+=2*(sb-sa); vc.pb(2*(sb-sa)); } else vc.pb(-2*(sb-sa)); } if(cur<-k)rc("NO"); if(cur<=k)rc("YES"); f[cur+k]=1; for(i=0;i<(int)vc.size();i++) { f|=(f>>vc[i]); } for(i=0;i<=2*k;i++)if(f[i])rc("YES"); cout<<"NO"<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...