QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#421256#7871. 命运kkkgjyismine45 23ms14448kbC++142.4kb2024-05-25 15:59:122024-05-25 15:59:12

Judging History

你现在查看的是最新测评结果

  • [2024-05-25 15:59:12]
  • 评测
  • 测评结果:5
  • 用时:23ms
  • 内存:14448kb
  • [2024-05-25 15:59:12]
  • 提交

answer

#include<bits/stdc++.h>
#define pii pair<int,int>
#define fi first
#define se second
#define ll long long
#define pb push_back
using namespace std;
bool vis[50004];
struct Node{int u,v,w;}e[500004];
bool operator<(Node a,Node b){return a.w<b.w;}
int n,m,s,k,W[50004],To[50004],tot,sz[50004],ct[50040],fa[50004],Ct,ct0;
vector<pii>vec[200005];
pii stk[1000005];
int col[1000005],tail,ctk,res[50004];
int find(int r){
	if(r==fa[r])return r;
	return find(fa[r]);
}
void merge(int u,int v){
	u=find(u),v=find(v);if(u==v)return;
	ct0-=(!ct[u])+(!ct[v]),--Ct;
	if(sz[u]<sz[v])swap(u,v);fa[v]=u;
	sz[u]+=sz[v],ct[u]+=ct[v];
    ct0+=(!ct[u]);
}
void Merge(int u,int v,int t){
	u=find(u),v=find(v);if(u==v)return;
	ct0-=(!ct[u])+(!ct[v]),--Ct;
	if(sz[u]<sz[v])swap(u,v);fa[v]=u;
	stk[++tail]=make_pair(u,v),col[tail]=t;
    sz[u]+=sz[v],ct[u]+=ct[v];
    ct0+=(!ct[u]);
}
void rollback(int p){
	while(tail&&col[tail]==p){
		int u=stk[tail].fi,v=stk[tail].se;
		ct0-=(!ct[u]),++Ct;
		sz[u]-=sz[v],ct[u]-=ct[v],fa[v]=v;
		ct0+=(!ct[u])+(!ct[v]);--tail;
	}
}
#define ls (p<<1)
#define rs (p<<1|1)
#define mid (l+r>>1)
void ins(int p,int l,int r,int a,pii v){
	if(a>r)return;
	if(a<=l){vec[p].pb(v);return;}
	if(a<=mid)ins(ls,l,mid,a,v);
	ins(rs,mid+1,r,a,v);
}
void solve(int p,int l,int r){
	for(auto v:vec[p])Merge(v.fi,v.se,p);
	if(l==r){
		if(ctk==k){rollback(p);return;}Merge(s,To[l],p+1);
		if(!ct0&&k-ctk-1>=Ct-1){res[l]=1,++ctk,rollback(p+1),rollback(p),ins(1,1,tot,l+1,make_pair(s,To[l]));return;}
		rollback(p+1),rollback(p);return;
	}
	solve(ls,l,mid),solve(rs,mid+1,r),rollback(p);
}
int main(){
	scanf("%d%d%d%d",&n,&m,&k,&s);
	for(int i=1;i<=m;++i){
		scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
		if(e[i].u==s)ct[e[i].v]=1;
		if(e[i].v==s)ct[e[i].u]=1;
	}ct[s]=1;
	sort(e+1,e+m+1);
	for(int i=1;i<=n;++i)sz[i]=1,fa[i]=i,ct0+=(!ct[i]);Ct=n;
	for(int i=1;i<=m;++i){
		if(e[i].v==s)swap(e[i].v,e[i].u);
		if(e[i].u==s){
			if(vis[e[i].v])continue;
			vis[e[i].v]=1;To[++tot]=e[i].v,W[tot]=e[i].w;
		}else merge(e[i].u,e[i].v);
	}
	if(k>tot){puts("nonnondayo");return 0;}
	solve(1,1,tot);
	if(ctk<k){puts("nonnondayo");return 0;}
	int Mx=0;ll Ans=0;
	for(int i=1;i<=n;++i)sz[i]=1,fa[i]=i,ct[i]=1;Ct=n,ct0=0;
	for(int i=1;i<=tot;++i)if(res[i])Mx=W[i],Ans+=1ll*W[i],merge(s,To[i]);
	for(int i=1;i<=m;++i){
		if(e[i].u==s)continue;
		if(e[i].w<Mx||Ct>1)Ans+=1ll*e[i].w,merge(e[i].u,e[i].v);
	}cout<<Ans;
	return 0;
}

詳細信息

Subtask #1:

score: 5
Accepted

Test #1:

score: 5
Accepted
time: 11ms
memory: 13972kb

input:

49277 49276 1 49277
1 2 2000
2 3 3000
2 4 4000
3 5 5000
3 6 6000
4 7 7000
1 8 8000
7 9 9000
1 10 10000
5 11 11000
4 12 12000
3 13 13000
13 14 14000
1 15 15000
7 16 16000
11 17 17000
2 18 18000
10 19 19000
6 20 20000
4 21 21000
17 22 22000
1 23 23000
14 24 24000
4 25 25000
16 26 26000
15 27 27000
9 2...

output:

1214136002000

result:

ok single line: '1214136002000'

Test #2:

score: 0
Accepted
time: 7ms
memory: 11800kb

input:

49324 49323 1 49324
1 2 2
2 3 3
2 4 4
3 5 5
4 6 6
6 7 7
2 8 8
2 9 9
4 10 10
6 11 11
9 12 12
4 13 13
8 14 14
8 15 15
7 16 16
11 17 17
15 18 18
2 19 19
10 20 20
19 21 21
14 22 22
16 23 23
20 24 24
23 25 25
3 26 26
2 27 27
8 28 28
11 29 29
20 30 30
15 31 31
16 32 32
19 33 33
29 34 34
5 35 35
21 36 36
1...

output:

nonnondayo

result:

ok single line: 'nonnondayo'

Test #3:

score: 0
Accepted
time: 11ms
memory: 14064kb

input:

49423 49422 1 1
1 2 2
2 3 3
1 4 4
3 5 5
2 6 6
1 7 7
1 8 8
7 9 9
3 10 10
3 11 11
5 12 12
3 13 13
9 14 14
10 15 15
13 16 16
5 17 17
9 18 18
12 19 19
17 20 20
4 21 21
5 22 22
12 23 23
21 24 24
21 25 25
11 26 26
17 27 27
21 28 28
18 29 29
17 30 30
2 31 31
21 32 32
28 33 33
17 34 34
31 35 35
11 36 36
8 3...

output:

nonnondayo

result:

ok single line: 'nonnondayo'

Test #4:

score: 0
Accepted
time: 10ms
memory: 11788kb

input:

49501 49500 49501 49501
1 2 2
1 3 3
3 4 4
2 5 5
5 6 6
1 7 7
6 8 8
5 9 9
6 10 10
5 11 11
2 12 12
12 13 13
13 14 14
8 15 15
13 16 16
5 17 17
9 18 18
9 19 19
9 20 20
14 21 21
18 22 22
16 23 23
7 24 24
1 25 25
7 26 26
1 27 27
15 28 28
22 29 29
20 30 30
12 31 31
4 32 32
16 33 33
22 34 34
11 35 35
27 36 3...

output:

nonnondayo

result:

ok single line: 'nonnondayo'

Subtask #2:

score: 0
Wrong Answer

Test #5:

score: 10
Accepted
time: 3ms
memory: 12020kb

input:

21 20 2 21
1 2 18581
1 3 9620
2 4 4362
1 5 7702
5 6 17435
4 7 11679
3 8 14832
1 9 15073
2 10 6595
5 11 19676
11 12 16943
12 13 5268
5 14 20262
8 15 8192
7 16 12340
7 17 1437
7 18 3064
2 19 10437
12 20 2882
19 21 13483

output:

nonnondayo

result:

ok single line: 'nonnondayo'

Test #6:

score: -10
Wrong Answer
time: 4ms
memory: 13920kb

input:

10 20 4 3
1 2 18247
2 3 9041
2 4 4031
2 5 7363
3 6 17172
1 7 11014
6 8 14781
8 9 15347
8 10 6598
5 9 19331
3 10 16523
10 6 5732
2 3 20357
6 9 8827
10 3 12864
6 3 1551
5 6 3932
3 1 10223
9 3 2296
8 5 13620

output:

70608

result:

wrong answer 1st lines differ - expected: '54418', found: '70608'

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Wrong Answer

Dependency #1:

100%
Accepted

Test #14:

score: 0
Wrong Answer
time: 13ms
memory: 14448kb

input:

49997 54855 3516 1
3 2 123052288
4 2 96660489
5 4 21916339
6 4 110026562
7 2 37432698
8 4 38560777
9 5 83209343
10 9 80352789
11 2 88956732
12 7 65449905
13 2 38239108
14 5 90154247
15 4 30810782
16 13 96492679
17 14 112886179
18 9 87190321
19 5 91181643
20 3 107304129
21 15 101439791
22 19 12060197...

output:

2876091506672

result:

wrong answer 1st lines differ - expected: '2688197428747', found: '2876091506672'

Subtask #5:

score: 0
Wrong Answer

Test #21:

score: 0
Wrong Answer
time: 23ms
memory: 13984kb

input:

9992 99999 500 1
1 2 96661121
1 3 21915940
1 4 110026320
1 5 37433129
1 6 38560320
1 7 83209024
1 8 80352054
1 9 88957672
1 10 65449874
1 11 38239186
1 12 90153728
1 13 30810974
1 14 96493404
1 15 112886259
1 16 87190053
1 17 91182163
1 18 107303768
1 19 101439823
1 20 120601875
1 21 122197599
1 22 ...

output:

6149779060378

result:

wrong answer 1st lines differ - expected: '112890891818', found: '6149779060378'

Subtask #6:

score: 0
Skipped

Dependency #3:

0%

Subtask #7:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%