結果
問題 | No.2677 Minmax Independent Set |
ユーザー |
![]() |
提出日時 | 2024-06-26 22:30:35 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 236 ms / 2,000 ms |
コード長 | 1,100 bytes |
コンパイル時間 | 6,558 ms |
コンパイル使用メモリ | 312,588 KB |
実行使用メモリ | 25,468 KB |
最終ジャッジ日時 | 2024-06-26 22:30:54 |
合計ジャッジ時間 | 15,696 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 61 |
ソースコード
#include<bits/stdc++.h>using namespace std;#include <atcoder/all>using namespace atcoder;using mint=modint998244353; //1000000007;using ll=long long;using pp=pair<int,int>;#define sr string#define vc vector#define fi first#define se second#define rep(i,n) for(int i=0;i<(int)n;i++)#define pb push_back#define all(v) v.begin(),v.end()#define pque priority_queue#define bpc(a) __builtin_popcount(a)int main(){int n;cin>>n; vc v(n,vc<int>(0));rep(i,n-1){int a,b;cin>>a>>b; a--;b--;v[a].pb(b);v[b].pb(a);}vc<pp>dp(n);auto f=[&](auto f,int a,int p)->pp{pp res={0,1};for(auto au:v[a])if(au!=p){auto [x,y]=f(f,au,a);res.fi+=max(x,y);res.se+=x;}return dp[a]=res;};f(f,0,-1);int ans=n;auto ff=[&](auto ff,int a,int p,pp now)->void{ans=min(ans,now.se);for(auto au:v[a])if(au!=p){int da=now.fi-max(dp[au].fi,dp[au].se);int db=now.se-dp[au].fi;int x=dp[au].fi+max(da,db);int y=dp[au].se+da;ff(ff,au,a,{x,y});}return;};ff(ff,0,-1,dp[0]);cout<<ans;}