怎么连个 sub1 都过不去!!!
查看原帖
怎么连个 sub1 都过不去!!!
1082999
jfls211320zhr楼主2024/11/8 20:18

rt,玄 33 关求调

#include<bits/stdc++.h>
using namespace std;
int n,m,totans;
int x[1000007],y[1000007];
int father[500006];
void Reset(){
	for(int i=1;i<=n;i++)father[i]=i;
	return;
}
int Find(int u){
	if(father[u]==u)return u;
	else return father[u]=Find(father[u]);
}
void Union(int u,int v){
	u=Find(u);
	v=Find(v);
	if(u==v)return;
	father[v]=u;
	return;
}
vector<int>vc,vceg;
void chk(){
	Reset();
	int tmp=vc.size();
	for(auto i:vceg)Union(x[i],y[i]);
	int r=Find(vc[0]);
	for(auto i:vc)if(Find(i)!=r)return;
	for(auto i:vc)cerr<<i<<" ";
	cerr<<"|";
	for(auto i:vceg)cerr<<" "<<i;
	cerr<<"\n";
	totans++;
	totans%=1000000007;
	return;
}
void search2(int u){
	if(u>m){
		chk();
		return;
	}
	search2(u+1);
	vceg.push_back(u);
	search2(u+1);
	vceg.pop_back();
	return;
}
void search(int u){
	if(u>n){
		if(vc.empty())return;
		search2(1);
		return;
	}
	search(u+1);
	vc.push_back(u);
	search(u+1);
	vc.pop_back();
	return;
}
int main(){
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++)scanf("%d %d",&x[i],&y[i]);
	search(1);
	printf("%d",totans);
	return 0;
}
2024/11/8 20:18
加载中...