結果
| 問題 | No.317 辺の追加 |
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2026-02-03 16:34:12 |
| 言語 | C++17 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,307 bytes |
| 記録 | |
| コンパイル時間 | 931 ms |
| コンパイル使用メモリ | 92,352 KB |
| 実行使用メモリ | 30,504 KB |
| 最終ジャッジ日時 | 2026-02-03 16:34:22 |
| 合計ジャッジ時間 | 9,387 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | WA * 1 TLE * 2 -- * 35 |
ソースコード
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const ll N=500005;
ll n,m;
ll hea[N],nex[N],rot[N],nod[N],idx,num[N],dp[N],dp2[N];
ll me[N];
void con(ll a,ll b){
nex[idx]=hea[a];
hea[a]=idx;
nod[idx]=b;
}
ll root(ll poi){
for(;rot[poi]!=rot[rot[poi]];){
rot[poi]=rot[rot[poi]];
}
return rot[poi];
}
void prodp(ll w,ll c){
if(dp[w]>-1){
prodp(w*2,c+dp[w]);
dp[w]=min(dp[w],c);
}
else{
dp[w]=c;
}
}
int main(){
memset(dp,-1,sizeof(dp));
memset(hea,-1,sizeof(hea));
memset(nex,-1,sizeof(nex));
cin>>n>>m;
for(ll i=1;i<=n;i++){
rot[i]=i;
num[i]=1;
}
for(ll i=1;i<=m;i++){
ll a,b;
cin>>a>>b;
if(a==b){
continue;
}
con(a,b);
con(b,a);
if(root(a)<root(b)){
rot[b]=rot[a];
num[a]+=num[b];
num[b]=0;
}
rot[a]=rot[b];
num[b]+=num[a];
num[a]=0;
}
for(ll i=1;i<=n;i++){
me[num[i]]+=1;
}
//
dp[0]=0;
for(ll i=1;i<=n;i++){
for(ll j=n;j>=i*me[i];j-=1){
for(ll k=1;k<=me[i];k++){
if(dp[j-i*k]==-1)continue;
if(dp[j]<=0)dp[j]=N*N;
dp[j]=min(dp[j],dp[j-i*k]+k);
}
}
}
// for(ll i=1;i<=n;i++){
// for(ll j=1;j<=me[i];j++){
// prodp(j*i,j-1);
// }
// }
for(ll i=1;i<=n;i++){
if(i!=1){
cout<<endl;
}
if(dp[i]==-1){
cout<<-1;
continue;
}
cout<<dp[i]-1;
}
}
vjudge1