Submission #905037

# Submission time Handle Problem Language Result Execution time Memory
905037 2024-01-12T13:14:05 Z vjudge1 The Xana coup (BOI21_xanadu) C++17
0 / 100
49 ms 17488 KB
#pragma GCC optimize("Ofast")

#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ld long double
#define pb push_back //emplace_back
#define pp pop_back
#define pii pair<ll, ll> //pair<int, int>
#define all(x) (x).begin(),(x).end()
#define mp(a,b) make_pair(a , b)
#define lb lower_bound
#define ub upper_bound
#define sz(x) (ll)(x).size()
#define F first
#define S second
#define bg(x) (x).begin()
#define For(x, n) for(int (x) = 0 ; (x) < (n) ; (x)++)
#define debug(x) cout << #x << " : " << x << endl
#define endl '\n'
#define arr(x) array<int , (x)>
#define yes cout << "impossible\n"
#define no cout << "NO\n"
#define FAST ios_base::sync_with_stdio(0);cin.tie(0);
#define INF 1000000000000000000
ll Sum(ll a , ll b , ll MOD)
{
 a %= MOD;
 b %= MOD;
 a += b;
 return a % MOD;
}

ll Mul(ll a , ll b , ll MOD)
{
 a %= MOD;
 b %= MOD;
 a *= b;
 return a % MOD;
}

ll Pow(ll a , ll b , ll MOD)
{
   ll res = 1;
   while(b)
   {
        if((b & 1))res = Mul(res , a , MOD);
     a = Mul(a , a , MOD);
     b >>= 1;
   }
   return res;
}

ll Min(ll a , ll b)
{
   if(a > b)return b;
   return a;
}

ll Max(ll a , ll b)
{
   if(a > b)return a;
   return b;
}

ll Ceil(ll a , ll b)
{
 if(a % b)return (a/b)+1;
 return a/b;
}

/////////////////////
//VALS
ll n;

const ll maxn = 1e5+1e3;
vector<ll> adj[maxn];

ll dp[maxn][2][2];
ll a[maxn];
/////////////////////
//FUNCTIONS
void dfs(ll i,ll par = -1) 
{
    dp[i][0][a[i]] = 0;
    dp[i][0][a[i] ^ 1] = INF;
    dp[i][1][a[i] ^ 1] = 1;
    dp[i][1][a[i]] = INF;
 
 	for (int j : adj[i])
    	if (j != par) 
		{
      		dfs(j, i);
      		for (int s = 0; s < 2; s++) 
			{
        		ll dp0 = dp[i][s][0], dp1 = dp[i][s][1];
        		dp[i][s][0] = Min(INF, Min(dp0 + dp[j][0][s], dp1 + dp[j][1][s]));
        		dp[i][s][1] = Min(INF, Min(dp0 + dp[j][1][s], dp1 + dp[j][0][s]));
      		}
    	}
    	
    	
}
/////////////////////
//SOLVE
void solve()
{
	cin >> n;
	
	For(i,n-1)
	{
		ll u, v;
		cin >> u >> v;
		u--;
		v--;
		adj[u].pb(v);
		adj[v].pb(u);
	}
	
	For(i,n)cin >> a[i];
	
	dfs(0,0);
	
	if(dp[0][0][0] == dp[0][1][0] and dp[0][1][0] == INF)no;
	else
		cout << Min(dp[0][0][0], dp[0][1][0]) << endl;
}
/////////////////////
//MAIN
int main()
{
    FAST;
    ll t = 1;
//    cin >> t;
    while(t--)
    {
        solve();
    }
}
/////////////////////
/*
ZZZZZZZ     A        M     M     IIIIIII  N     N
     Z     A A      M M   M M       I     NN    N
    Z     A   A    M   M M   M      I     N N   N
   Z     AAAAAAA  M     M     M     I     N  N  N
  Z      A     A  M           M     I     N   N N
 Z       A     A  M           M     I     N    NN
ZZZZZZZ  A     A  M           M  IIIIIII  N     N  TREE
*/

Compilation message

xanadu.cpp: In function 'void solve()':
xanadu.cpp:20:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   20 | #define For(x, n) for(int (x) = 0 ; (x) < (n) ; (x)++)
      |                           ^
xanadu.cpp:112:2: note: in expansion of macro 'For'
  112 |  For(i,n-1)
      |  ^~~
xanadu.cpp:20:27: warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]
   20 | #define For(x, n) for(int (x) = 0 ; (x) < (n) ; (x)++)
      |                           ^
xanadu.cpp:122:2: note: in expansion of macro 'For'
  122 |  For(i,n)cin >> a[i];
      |  ^~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 6488 KB Output is correct
2 Correct 2 ms 6492 KB Output is correct
3 Correct 2 ms 6744 KB Output is correct
4 Correct 3 ms 6488 KB Output is correct
5 Incorrect 2 ms 6492 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 6488 KB Output is correct
2 Correct 2 ms 6492 KB Output is correct
3 Correct 2 ms 6744 KB Output is correct
4 Correct 3 ms 6488 KB Output is correct
5 Incorrect 2 ms 6492 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 41 ms 17488 KB Output is correct
2 Incorrect 49 ms 17280 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 41 ms 17472 KB Output is correct
2 Incorrect 39 ms 17488 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 6488 KB Output is correct
2 Correct 2 ms 6492 KB Output is correct
3 Correct 2 ms 6744 KB Output is correct
4 Correct 3 ms 6488 KB Output is correct
5 Incorrect 2 ms 6492 KB Output isn't correct
6 Halted 0 ms 0 KB -