Submission #905037

#TimeUsernameProblemLanguageResultExecution timeMemory
905037vjudge1The Xana coup (BOI21_xanadu)C++17
0 / 100
49 ms17488 KiB
#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 (stderr)

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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...