Submission #1020743

#TimeUsernameProblemLanguageResultExecution timeMemory
1020743owoovoTug of War (BOI15_tug)C++17
100 / 100
1765 ms6664 KiB
#include<bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("popcnt,avx2") #define ll long long #define F first #define S second using namespace std; bitset<1200010> bs; int n,k,sum,d[60010],use[60010],useedge[60010]; vector<pair<pair<int,int>,int>> edge; vector<int> e[60010]; int main(){ ios::sync_with_stdio(0); cin.tie(0); bs[0]=1; cin>>n>>k; for(int i=0;i<2*n;i++){ int a,b,c; cin>>a>>b>>c; sum+=c; edge.push_back({{a,b+n},c}); e[a].push_back(i); e[b+n].push_back(i); d[a]++; d[b+n]++; } queue<int> q; for(int i=1;i<=2*n;i++){ if(d[i]==1)q.push(i); } while(!q.empty()){ int now=q.front(); q.pop(); for(auto x:e[now]){ if(useedge[x]!=0)continue; useedge[x]=1; if(now<=n){ bs<<=edge[x].S; } use[now]=1; d[edge[x].F.F]--; if(d[edge[x].F.F]==1)q.push(edge[x].F.F); d[edge[x].F.S]--; if(d[edge[x].F.S]==1)q.push(edge[x].F.S); } } for(int i=1;i<=2*n;i++){ if(use[i]==0&&d[i]==0){ cout<<"NO\n"; return 0; } } for(int i=1;i<=2*n;i++){ if(use[i]==1)continue; ll val[2]={0,0},bt=0,cnt=0; int now=i; while(use[now]==0){ for(auto x:e[now]){ if(useedge[x])continue; useedge[x]=1; use[now]=1; val[bt]+=edge[x].S; bt^=1; now=now^edge[x].F.F^edge[x].F.S; break; } } bs=(bs<<val[0])|(bs<<val[1]); } for(int i=0;i<=sum;i++){ if(abs(sum-2*i)<=k&bs[i]){ cout<<"YES\n"; return 0; } } cout<<"NO\n"; return 0; }

Compilation message (stderr)

tug.cpp: In function 'int main()':
tug.cpp:55:30: warning: unused variable 'cnt' [-Wunused-variable]
   55 |         ll val[2]={0,0},bt=0,cnt=0;
      |                              ^~~
tug.cpp:71:24: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
   71 |         if(abs(sum-2*i)<=k&bs[i]){
      |            ~~~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...