UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#200627#3474. 连通块数量JuRuoError_YBW1001831ms60292kbC++111.6kb2024-01-07 11:41:192024-01-07 12:05:26

answer

#include <bits/stdc++.h>
#include <bits/extc++.h>
#define int long long
char freadgetchar(){
	static char buf[100000],*p1=buf,*p2=buf;
	if(p1==p2){
		p2=(p1=buf)+fread(buf,1,100000,stdin);
		if (p1==p2)return EOF;
	}
	return *p1++;
}
void read(int&x){
	static char c;
	c=freadgetchar();
	int b=1;
	for(x = 0;!(c>='0'&&c<='9');c=freadgetchar()) if(c == '-') b = -b;
	for(;c>='0'&&c<='9';x=x*10+c-'0',c=freadgetchar());x*=b;
}
const int MAXN=1e6+5;
std::vector<int> g[MAXN];
int n,m;
int tag[MAXN],vis[MAXN],s[MAXN];
int dgr[MAXN];
int fa[MAXN],tot;
void init(){
	for(int i=1;i<=n;i++)fa[i]=i;
}
int findfa(int x){
	if(x==fa[x])return x;
	else return fa[x]=findfa(fa[x]);
}
void merge(int x,int y){
	int fx=findfa(x),fy=findfa(y);
	if(fx!=fy)fa[fx]=fy;
}
int minn=1,minx=0;
signed main(){
        std::ios::sync_with_stdio(0);
	//freopen("2024.in","r",stdin);
	std::cin>>n>>m;
	for(int i=1;i<=m;i++){
		int u,v;
		std::cin>>u>>v;
		g[u].emplace_back(v);
		g[v].emplace_back(u);
		++dgr[u];
		++dgr[v];
	}
	init();
	for(int i=2;i<=n;i++){
		if(dgr[i]<dgr[minn])minx=dgr[i],minn=i;
	}
	for(auto x:g[minn]){
		tag[x]=1;
	}
	for(int i=1;i<=n;i++){
		if(!tag[i]){
			fa[i]=minn;
			vis[i]=1;
		}
	}
	for(int i=1;i<=n;i++){
		if(!vis[i])s[++tot]=i;
	}
	memset(tag,0,sizeof tag);
	for(int i=1;i<=n;i++){
		int cnt=0;
		for(auto x:g[i]){
			tag[x]=1;
			cnt+=vis[x];
		}
		if(tot+cnt<n)merge(i,minn);
		for(int j=1;j<=tot;j++){
			if(!tag[s[j]])merge(i,s[j]);
			
		}
		for(auto x:g[i]){
			tag[x]=0;
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++)ans+=(fa[i]==i);
	std::cout<<ans<<'\n';
	return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 92ms
memory: 40660kb

input:

941 442218
106 339
515 606
923 444
123 606
186 395
37 580
49 571
339 940
591 14
499 755
798 530
81 1...

output:

889

result:

ok single line: '889'

Test #2:

score: 10
Accepted
time: 87ms
memory: 40868kb

input:

954 454485
498 636
732 270
577 534
247 443
421 910
431 765
873 208
369 906
644 14
861 275
203 717
67...

output:

858

result:

ok single line: '858'

Test #3:

score: 10
Accepted
time: 83ms
memory: 40664kb

input:

932 433809
923 721
70 569
495 626
606 3
599 390
775 113
692 645
759 856
160 257
165 513
294 660
108 ...

output:

895

result:

ok single line: '895'

Test #4:

score: 10
Accepted
time: 116ms
memory: 44224kb

input:

200000 200000
9411 13081
102149 19907
193611 24114
159730 105867
96529 35050
21890 102981
87777 1824...

output:

1

result:

ok single line: '1'

Test #5:

score: 10
Accepted
time: 132ms
memory: 44228kb

input:

200000 200000
125539 129221
106895 82089
118673 102890
99009 89855
30685 139232
82330 30021
87868 18...

output:

1

result:

ok single line: '1'

Test #6:

score: 10
Accepted
time: 118ms
memory: 44216kb

input:

200000 200000
176259 110770
87448 103054
67926 181667
95184 41139
164840 76118
118577 22469
96470 17...

output:

1

result:

ok single line: '1'

Test #7:

score: 10
Accepted
time: 273ms
memory: 53564kb

input:

22085 1000000
8869 21194
8244 21337
16569 14762
6614 11105
19632 13741
4234 4177
4234 15482
8869 649...

output:

23

result:

ok single line: '23'

Test #8:

score: 10
Accepted
time: 281ms
memory: 53768kb

input:

42928 1000000
22158 7729
1341 19332
6305 7112
15501 33423
34891 39753
1341 41204
15501 6448
30776 38...

output:

13

result:

ok single line: '13'

Test #9:

score: 10
Accepted
time: 307ms
memory: 55384kb

input:

86058 1000000
80664 54565
70936 66426
15732 12971
70936 4641
42626 61035
41941 40769
80664 54705
211...

output:

7

result:

ok single line: '7'

Test #10:

score: 10
Accepted
time: 342ms
memory: 60292kb

input:

111020 1000000
50007 869
19222 62960
6500 80064
71353 33380
71353 5481
71353 20752
4597 15614
46508 ...

output:

5

result:

ok single line: '5'

Extra Test:

score: 0
Extra Test Passed