結果

問題 No.317 辺の追加
コンテスト
ユーザー vjudge1
提出日時 2026-02-03 10:22:32
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
結果
WA  
実行時間 -
コード長 1,053 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 6,732 ms
コンパイル使用メモリ 335,824 KB
実行使用メモリ 8,152 KB
最終ジャッジ日時 2026-02-03 10:22:46
合計ジャッジ時間 7,384 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 13 WA * 25
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include<bits/stdc++.h>
#pragma GCC optimize("O3,Ofast")
using namespace std;
const int N=1e5+5,M=4e5+5;
int head[N],cnt;struct node{int nxt,to;}g[M];
void add(int u,int v){g[++cnt]={head[u],v};head[u]=cnt;}
int n,m,a[N],siz,f[N];bool vis[N];
void dfs(int u){
	++siz;vis[u]=1;
	for(int i=head[u];i;i=g[i].nxt){
		int v=g[i].to;
		if(vis[v])  continue;
		dfs(v);
	}
}
int cx,w[N],v[N];
signed main(){
	scanf("%d%d",&n,&m);
	for(int i=1,u,v;i<=m;i++){
		scanf("%d%d",&u,&v);
		add(u,v);add(v,u);
	}
	for(int i=1;i<=n;i++)if(!vis[i]){
		siz=0;
		dfs(i);
		++a[siz];
	}
	for(int i=1;i<=n;i++)if(a[i]){
		int c=1;
		while(a[i]>c){
			a[i]-=c;
			w[++cx]=i*c;
			v[++cx]=i;
			c<<=1;
		}
		w[++cx]=a[i]*i;
		v[++v[0]]=a[i];
	}
	// puts("ylcccx");
	memset(f,0x3f,sizeof f);f[0]=-1;
	// for(int i=1;i<=n;i++)for(int k=1;k<=a[i];k++)for(int j=n;j>=i*k;j--)
		// f[j]=min(f[j],f[j-i*k]+1);
	for(int i=1;i<=cx;i++)for(int j=n;j>=w[i];j--)  f[j]=min(f[j],f[j-w[i]]+v[i]);
	for(int i=1;i<=n;i++)
		if(f[i]>1e9)  puts("-1");
		else  printf("%d\n",f[i]);
	return 0;
}
0