# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
494899 | fcmalkcin | Tug of War (BOI15_tug) | C++17 | 442 ms | 13400 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#pragma GCC optimize("Ofast")
#pragma GCC optimization("unroll-loops, no-stack-protector")
#pragma GCC target("avx,avx2,fma")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pll pair<ll,ll>
#define ff first
#define ss second
#define pb push_back
#define endl "\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
const ll maxn=3e5+21;
const ll mod=998244353 ;
const ll base=1e9+1000;
/// you will be the best but now you just are trash
/// goal 2/7
ll par[maxn];
ll cnt[maxn];
ll find_par(ll u)
{
if (par[u]<0) return u;
return par[u]=find_par(par[u]);
}
void dsu(ll x,ll y)
{
x=find_par(x);
y=find_par(y);
if (x==y) return ;
if (y>x) swap(x,y);
cnt[y]+=cnt[x];
par[y]+=par[x];
par[x]=y;
}
vector<ll> adj[maxn];
bool dd[maxn];
ll n;
ll x[maxn];
ll y[maxn];
ll w[maxn];
ll pos;
ll cnta=0;
vector<ll> vt;
ll ed;
void dfs(ll u,ll par)
{
ll nw=par;
dd[u]=1;
vt.pb(u);
for (auto id:adj[u])
{
ll to=x[id]+y[id]-u;
if (to==nw)
{
nw=-1;
continue;
}
if (dd[to])
{
ed=id;
}
else
{
dfs(to,u);
}
}
}
void dfs1(ll u,ll par)
{
for (auto id:adj[u])
{
if (id==ed) continue;
ll to=x[id]+y[id]-u;
if (to==par) continue;
if (to<=n) cnta+=w[id];
dfs1(to,u);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
if (fopen("t.inp", "r"))
{
freopen("test.inp", "r", stdin);
freopen("test.out", "w", stdout);
}
ll k;
cin>> n>> k;
for (int i=1;i<=2*n;i++)
{
par[i]=-1;
}
ll all=0;
for (int i=1;i<=2*n;i++)
{
cin>>x[i]>>y[i]>>w[i];
all+=w[i];
y[i]+=n;
adj[x[i]].pb(i);
adj[y[i]].pb(i);
dsu(x[i],y[i]);
cnt[find_par(x[i])]++;
}
vector<ll> vt;
ll nw=0;
bitset<600002> bs;
bs[0]=1;
for (int i=1;i<=2*n;i++)
{
if (i==find_par(i))
{
if (cnt[i]!=-par[i])
{
cout <<"NO";
return 0;
}
cnta=0;
ed=-1;
dfs(i,0);
assert(ed!=-1);
dfs1(x[ed],0);
ll f=cnta+w[ed];
cnta=0;
dfs1(y[ed],0);
ll l=cnta;
if (f>l) swap(l,f);
nw+=f;
bs|=(bs<<(l-f));
}
}
for (int i=0;i<=600000;i++)
{
if (bs[i])
{
ll vala=nw+i;
if (abs(vala-(all-vala))<=k)
{
cout <<"YES";
return 0;
}
}
}
cout <<"NO";
}
/*11 1 4
2 14 10 3 15 6 1 2 9 10 9
1 9*/
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |