Submission #1193015

#TimeUsernameProblemLanguageResultExecution timeMemory
1193015_rain_Tug of War (BOI15_tug)C++20
0 / 100
5 ms2888 KiB
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=(int)3e4; set<pair<int,int>>ke[N+2]; bool vis[N+2]={}; int n,k,tot=0; bitset<600002>dp; vector<int>item; void dfs(int u){ vis[u]=true; if (ke[u].size()==0) return; pair<int,int>v=*ke[u].begin(); tot+=v.second; if (!vis[v.first]){ ke[u].clear(); ke[v.first].erase(ke[v.first].find({u,-v.second})); dfs(v.first); } } int main(){ ios::sync_with_stdio(false); cin.tie(0) ; cout.tie(0); // freopen("main.inp","r",stdin); cin>>n>>k; for(int i=1;i<=2*n;++i){ int l,r,s; cin>>l>>r>>s; ke[l].insert({r+n,s}); ke[r+n].insert({l,-s}); } for(int i=1;i<=2*n;++i) if (ke[i].size()==0) { cout<<"NO"; return 0; } queue<int>q; for(int i=1;i<=2*n;++i){ if (ke[i].size()==1){ q.push(i); vis[i]=true; } } int sum_tot=0; while (q.size()){ int u=q.front(); if (ke[u].size()==0){ cout<<"NO"; return 0; } pair<int,int>x=*ke[u].begin(); sum_tot+=x.second; ke[x.first].erase(ke[x.first].find({u,-x.second})); if (vis[x.first]==0 && ke[x.first].size()==1){ vis[x.first]=true; q.push(x.first); } ke[u].clear(); } if (sum_tot!=0) item.push_back(abs(sum_tot)); for(int i=1;i<=2*n;++i){ if (!vis[i] && ke[i].size()){ tot=0; assert(ke[i].size()==2); ke[i].erase(ke[i].begin()); dfs(i); if (tot!=0) item.push_back(abs(tot)); } } int sm=accumulate(item.begin(),item.end(),0); dp[0]=1; for(auto&x:item) dp|=(dp<<x); for(int i=0;i<=sm;++i){ if (dp[i] && abs(2*i-sm)<=k){ cout<<"YES\n"; return 0; } } cout<<"NO"; exit(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...