結果

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

ソースコード

diff #
raw source code

#include<bits/stdc++.h>
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);
	}
}
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[++a[0]]=siz;
	}
	// puts("ylcccx");
	// for(int i=1;i<=a[0];i++)  cout<<a[i]<<endl;
	memset(f,0x3f,sizeof f);f[0]=-1;
	for(int i=1;i<=a[0];i++)for(int j=n;j>=a[i];j--)
		f[j]=min(f[j],f[j-a[i]]+1);
	for(int i=1;i<=n;i++)
		if(f[i]>1e9)  puts("-1");
		else  printf("%d\n",f[i]);
	return 0;
}
0