Submission #905033

# Submission time Handle Problem Language Result Execution time Memory
905033 2024-01-12T13:13:20 Z vjudge1 The Xana coup (BOI21_xanadu) C++17
Compilation error
0 ms 0 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 dfs(long long int, long long int)':
xanadu.cpp:99:75: error: no matching function for call to 'min(long int, const long long int&)'
   99 |           dp[i][s][0] = min(INF, min(dp0 + dp[j][0][s], dp1 + dp[j][1][s]));
      |                                                                           ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from xanadu.cpp:3:
/usr/include/c++/10/bits/stl_algobase.h:230:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)'
  230 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:230:5: note:   template argument deduction/substitution failed:
xanadu.cpp:99:75: note:   deduced conflicting types for parameter 'const _Tp' ('long int' and 'long long int')
   99 |           dp[i][s][0] = min(INF, min(dp0 + dp[j][0][s], dp1 + dp[j][1][s]));
      |                                                                           ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from xanadu.cpp:3:
/usr/include/c++/10/bits/stl_algobase.h:278:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)'
  278 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:278:5: note:   template argument deduction/substitution failed:
xanadu.cpp:99:75: note:   deduced conflicting types for parameter 'const _Tp' ('long int' and 'long long int')
   99 |           dp[i][s][0] = min(INF, min(dp0 + dp[j][0][s], dp1 + dp[j][1][s]));
      |                                                                           ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from xanadu.cpp:3:
/usr/include/c++/10/bits/stl_algo.h:3468:5: note: candidate: 'template<class _Tp> constexpr _Tp std::min(std::initializer_list<_Tp>)'
 3468 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3468:5: note:   template argument deduction/substitution failed:
xanadu.cpp:99:75: note:   mismatched types 'std::initializer_list<_Tp>' and 'long int'
   99 |           dp[i][s][0] = min(INF, min(dp0 + dp[j][0][s], dp1 + dp[j][1][s]));
      |                                                                           ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from xanadu.cpp:3:
/usr/include/c++/10/bits/stl_algo.h:3474:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::min(std::initializer_list<_Tp>, _Compare)'
 3474 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3474:5: note:   template argument deduction/substitution failed:
xanadu.cpp:99:75: note:   mismatched types 'std::initializer_list<_Tp>' and 'long int'
   99 |           dp[i][s][0] = min(INF, min(dp0 + dp[j][0][s], dp1 + dp[j][1][s]));
      |                                                                           ^
xanadu.cpp:100:75: error: no matching function for call to 'min(long int, const long long int&)'
  100 |           dp[i][s][1] = min(INF, min(dp0 + dp[j][1][s], dp1 + dp[j][0][s]));
      |                                                                           ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from xanadu.cpp:3:
/usr/include/c++/10/bits/stl_algobase.h:230:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::min(const _Tp&, const _Tp&)'
  230 |     min(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:230:5: note:   template argument deduction/substitution failed:
xanadu.cpp:100:75: note:   deduced conflicting types for parameter 'const _Tp' ('long int' and 'long long int')
  100 |           dp[i][s][1] = min(INF, min(dp0 + dp[j][1][s], dp1 + dp[j][0][s]));
      |                                                                           ^
In file included from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from xanadu.cpp:3:
/usr/include/c++/10/bits/stl_algobase.h:278:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::min(const _Tp&, const _Tp&, _Compare)'
  278 |     min(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algobase.h:278:5: note:   template argument deduction/substitution failed:
xanadu.cpp:100:75: note:   deduced conflicting types for parameter 'const _Tp' ('long int' and 'long long int')
  100 |           dp[i][s][1] = min(INF, min(dp0 + dp[j][1][s], dp1 + dp[j][0][s]));
      |                                                                           ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from xanadu.cpp:3:
/usr/include/c++/10/bits/stl_algo.h:3468:5: note: candidate: 'template<class _Tp> constexpr _Tp std::min(std::initializer_list<_Tp>)'
 3468 |     min(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3468:5: note:   template argument deduction/substitution failed:
xanadu.cpp:100:75: note:   mismatched types 'std::initializer_list<_Tp>' and 'long int'
  100 |           dp[i][s][1] = min(INF, min(dp0 + dp[j][1][s], dp1 + dp[j][0][s]));
      |                                                                           ^
In file included from /usr/include/c++/10/algorithm:62,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
                 from xanadu.cpp:3:
/usr/include/c++/10/bits/stl_algo.h:3474:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::min(std::initializer_list<_Tp>, _Compare)'
 3474 |     min(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/10/bits/stl_algo.h:3474:5: note:   template argument deduction/substitution failed:
xanadu.cpp:100:75: note:   mismatched types 'std::initializer_list<_Tp>' and 'long int'
  100 |           dp[i][s][1] = min(INF, min(dp0 + dp[j][1][s], dp1 + dp[j][0][s]));
      |                                                                           ^
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];
      |  ^~~