結果
| 問題 | No.317 辺の追加 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-02-03 15:23:19 |
| 言語 | C++14 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,107 bytes |
| 記録 | |
| コンパイル時間 | 722 ms |
| コンパイル使用メモリ | 76,960 KB |
| 実行使用メモリ | 7,976 KB |
| 最終ジャッジ日時 | 2026-02-03 15:23:24 |
| 合計ジャッジ時間 | 4,916 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 13 WA * 25 |
ソースコード
#include<iostream>
#include<cstring>
using namespace std;
int n,m,fa[100005],siz[100005],cnt[100005],dp[100005],w[100005],v[100005],len;
void fenjie(int i)
{
int now=1;
while(cnt[i]>=now)
{
len++;
w[len]=i;
v[len]=now;
cnt[i]-=now;
now<<=1;
}
if(cnt[i])
v[++len]=cnt[i];
}
int find_fa(int i)
{
if(fa[i]==i)
return i;
fa[i]=find_fa(fa[i]);
return fa[i];
}
void __marge(int x,int y)
{
int fx=find_fa(x),fy=find_fa(y);
if(fx!=fy)
{
siz[fx]+=siz[fy];
siz[fy]=0;
fa[fy]=fx;
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
fa[i]=i;
siz[i]=1;
}
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
__marge(x,y);
}
for(int i=1;i<=n;i++)
{
if(fa[i]==i)
cnt[siz[i]]++;
}
for(int i=1;i<=n;i++)
{
if(cnt[i])
fenjie(i);
}
memset(dp,0x3f,sizeof(dp));
dp[0]=0;
for(int i=1;i<=len;i++)
{
for(int j=n;j>=v[i]*w[i];j--)
{
if(dp[j-v[i]*w[i]]!=0x3f3f3f3f)
dp[j]=min(dp[j],dp[j-v[i]*w[i]]+v[i]);
}
}
for(int i=1;i<=n;i++)
{
if(dp[i]!=0x3f3f3f3f)
printf("%d\n",dp[i]-1);
else
printf("-1\n");
}
return 0;
}
//924
vjudge1