Submission #189122

#TimeUsernameProblemLanguageResultExecution timeMemory
189122MvCTug of War (BOI15_tug)C++11
23 / 100
164 ms3068 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=2e6+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],rnx[nmax],nr,v[nmax],cnt; vector<int>g[nmax],vc; 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]],rnx[r[vl[i]]]=i,sa+=s[vl[i]]; for(i=n+1;i<=2*n;i++)nx[i]=l[vl[i]],rnx[l[vl[i]]]=i,sb+=s[vl[i]]; cur=sa-sb; b.reset(); for(i=1;i<=2*n;i++) { if(b[i])continue; x=i,nr++; while(!b[x]) { v[x]=nr; b[x]=1; x=nx[x]; } if(v[x]!=nr)continue; y=x,sa=sb=0,cnt=0; while(cnt<=2*n) { //assert((ld)clock()/CLOCKS_PER_SEC<=1.2); cnt++; if(x<=n)sa+=s[vl[x]]; else sb+=s[vl[x]]; x=rnx[x]; if(x==y)break; } if(cnt>=2*n)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...