蒟蒻求助T430959
  • 板块题目总版
  • 楼主o7u7o
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/22 16:43
  • 上次更新2024/3/22 19:13:03
查看原帖
蒟蒻求助T430959
530679
o7u7o楼主2024/3/22 16:43

#7 TLE

蒟蒻写的dfs和并查集都T在这个点QAQ

//dfs
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
const int M=2e6+5;
int nex[M],to[M],p;
int head[N],vis[N];
void add(int a,int b){
    nex[++p]=head[a];
    head[a]=p;
    to[p]=b;
}
int n,m;
int ans;
void dfs(int u){
	vis[u]=1;
	ans++;
	for(int i=head[u];i;i=nex[i]){
		int v=to[i];
		if(!vis[v]) dfs(v);
	}
}
int read(){
	int x=0,w=1;
	char ch=0;
	while(ch<'0' || ch>'9'){
    	if(ch=='-') w=-1;
    	ch=getchar();
	}
	while(ch>='0' && ch<='9'){
		x=(x<<3)+(x<<1)+(ch-'0');
		ch=getchar();
	}
	return x*w;
}
void write(int x){
	if(x<0){
		x=-x;
		putchar('-');
	}
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
int main(){
	n=read();
	m=read();
	for(int i=1;i<=m;i++){
		int k,u,v;
		k=read();
		u=read();
		for(int j=2;j<=k;j++){
			v=read();
			add(u,v);
			add(v,u);
		}
	}
	dfs(1);
	write(ans);
	return 0;
}

//并查集
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,m;
int fa[N]; 
int ans;
int find(int x){
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}
void merge(int a,int b){
	int t1,t2;
	t1=find(a);
	t2=find(b);
	if(t1!=t2) fa[t1]=t2;
}
int read(){
	int x=0,w=1;
	char ch=0;
	while(ch<'0' || ch>'9'){
    	if(ch=='-') w=-1;
    	ch=getchar();
	}
	while(ch>='0' && ch<='9'){
		x=(x<<3)+(x<<1)+(ch-'0');
		ch=getchar();
	}
	return x*w;
}
void write(int x){
	if(x<0){
		x=-x;
		putchar('-');
	}
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
int main(){
	n=read();
	m=read();
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=m;i++){
		int k,u,v;
		k=read();
		u=read();
		for(int j=2;j<=k;j++){
			v=read();
			merge(u,v);
		}
	}
	for(int i=1;i<=n;i++)
		if(find(1)==find(i)) ans++;
	write(ans);
	return 0;
}
2024/3/22 16:43
加载中...