結果
問題 | No.317 辺の追加 |
ユーザー |
![]() |
提出日時 | 2025-01-19 12:05:10 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 48 ms / 2,000 ms |
コード長 | 1,474 bytes |
コンパイル時間 | 1,483 ms |
コンパイル使用メモリ | 161,436 KB |
実行使用メモリ | 15,616 KB |
最終ジャッジ日時 | 2025-01-19 12:05:18 |
合計ジャッジ時間 | 5,225 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 38 |
ソースコード
#include<bits/stdc++.h>#define ll long longusing namespace std;ll read(){ll s=0,p=1;char c;c=getchar();while((c>'9'||c<'0')&&c!='-')c=getchar();if(c=='-'){p=-1;c=getchar();}while(c>='0'&&c<='9'){s=(s<<3)+(s<<1)+c-'0';c=getchar();}return s*p;}inline void write(ll x){if(x==0)return;if(x<0){putchar('-');write(-x);return;}write(x/10);putchar(x%10+'0');return;}ll n,m,h[200000],f[200000],l,dfn[200000],mi,dp[200000],tot[200000],zl,v[200000],w[200000];struct bs{ll n,t;}e[200000];void cr(ll x,ll y){e[++l].t=y;e[l].n=h[x];h[x]=l;}void dfs(ll x,ll fa){dfn[x]=1;for(int i=h[x];i;i=e[i].n)if(e[i].t!=fa&&e[i].t!=x&&!dfn[e[i].t]){dfs(e[i].t,x);dfn[x]+=dfn[e[i].t];}return;}int main(){ll x,y;n=read();m=read();while(m){m--;x=read();y=read();cr(x,y);cr(y,x);}l=0;for(int i=1;i<=n;i++){dp[i]=n+1;if(!dfn[i]){dfs(i,-1);f[dfn[i]]++;if(f[dfn[i]]==1)tot[++l]=dfn[i];}}for(int i=1;i<=l;i++){x=tot[i];y=1;while(f[x]>=y){v[++zl]=y;w[zl]=y*x;f[x]-=y;y*=2;}if(f[x]){v[++zl]=f[x];w[zl]=f[x]*x;}}dp[0]=0;for(int i=1;i<=zl;i++)for(int k=n;k>=w[i];k--)dp[k]=min(dp[k],dp[k-w[i]]+v[i]);for(int i=1;i<=n;i++)if(dp[i]==n+1){write(-1);putchar('\n');}elseprintf("%lld\n",dp[i]-1);return 0;}