結果
| 問題 | No.3769 Even Contraction |
| コンテスト | |
| ユーザー |
simasima_71
|
| 提出日時 | 2026-10-16 21:59:40 |
| 言語 | C++23(gcc16) (gcc 16.2.0 + boost 1.92.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 2,368 bytes |
| 記録 | |
| コンパイル時間 | 11,032 ms |
| コンパイル使用メモリ | 717,744 KB |
| 実行使用メモリ | 29,056 KB |
| 最終ジャッジ日時 | 2026-10-16 21:59:58 |
| 合計ジャッジ時間 | 16,305 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 32 WA * 15 |
ソースコード
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
#define rep(i, l, r) for (ll i = (l); i < (r); ++i)
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using pl = pair<ll,ll>;
using vi = vector<int>;
using vl = vector<ll>;
using vvl = vector<vector<ll>>;
using vvvl = vector<vector<vector<ll>>>;
template<class T> using pq_ = priority_queue<T, vector<T>, greater<T>>;
#define sz(x) (int)(x).size()
typedef pair<int, int> pii;
using mint=modint998244353;
// g++ a.cpp -std=c++23 -I.
// g++ -std=c++23 -I. a.cpp -o main
// g++ -std=c++23 -I. anaive.cpp -o naive
// g++ -std=c++23 -I. agene.cpp -o gene
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/multiprecision/cpp_int.hpp>
namespace mp = boost::multiprecision;
using Bint = mp::cpp_int;
using Real = mp::number<mp::cpp_dec_float<1024>>;
int main(){
ios::sync_with_stdio(false);
std::cin.tie(nullptr);
ll n;
cin>>n;
vl a(n-1);
vl b(n-1);
rep(i,0,n-1){
cin>>a[i]>>b[i];
a[i]--;
b[i]--;
}
vl z(n);
rep(i,0,n){
cin>>z[i];
}
vvl g(n);
ll ans=0;
vl c(n);
rep(i,0,n-1){
if(z[a[i]]==z[b[i]])ans++;
else if(z[a[i]]==1)c[b[i]]++;
else if(z[b[i]]==1)c[a[i]]++;
else {
g[a[i]].push_back(b[i]);
g[b[i]].push_back(a[i]);
}
}
vector<bool> e(n,false);
auto dfs = [&](auto self,ll now) -> array<ll,3> {
vector<array<ll,2>> u;
e[now]=true;
vector<array<ll,3>> r;
rep(i,0,g[now].size()){
if(e[g[now][i]]==false){
e[g[now][i]]=true;
r.push_back(self(self,g[now][i]));
}
}
array<ll,3> zans={0,0,0};
ll ef=-10000000000;
rep(i,0,r.size()){
zans[0]+=max(r[i][0],r[i][1]);
zans[1]+=max(r[i][0],r[i][1]+1);
ef=max(ef,r[i][2]+1-max(r[i][0],r[i][1]+1));
zans[2]+=max(r[i][0],r[i][1]+1);
}
zans[1]+=ef;
zans[1]+=c[now];
zans[2]+=c[now];
return zans;
};
rep(i,0,n){
if(z[i]!=1&&(!(e[i]))){
auto u=dfs(dfs,i);
ans+=max(u[0],u[1]);
}
}
cout<<ans<<endl;
}
simasima_71