怎么15pts的暴力都能错。。。
查看原帖
怎么15pts的暴力都能错。。。
1379399
reductt楼主2024/11/27 12:15

rt,是我对题意的理解有误吗,为什么我的这个暴力第二个样例输出的是 131。。。

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define FOR_(i,a,b) for(int i=(b);i>=(a);--i)
#define fir first
#define sec second
#define pb push_back
namespace FastIO{
#define gc getchar
	inline int rd(){int x=0,w=0;char c=gc();while(c<'0'||'9'<c)w^=(c=='-'),c=gc();while('0'<=c&&c<='9')x=x*10+c-'0',c=gc();return w?-x:x;}
	template<typename T>inline void write(T x){return x?(write(x/10),putchar(x%10+'0'),void()):void();}
	template<typename T>inline void print(T x){return x?((x>0)?write(x):(putchar('-'),write(-x)),void()):(putchar('0'),void());}
	template<typename T>inline void print(T x,char c){print(x),putchar(c);}
#undef gc
}
#define rd FastIO::rd
#define print FastIO::print
using i128=__int128;
using ull=unsigned long long;
using pii=pair<int,int>;
template<typename T>inline void ckmax(T &x,T y){x=(x>y)?x:y;}
template<typename T>inline void ckmin(T &x,T y){x=(x<y)?x:y;}
const int N=5e5+10,M=1e6+10,MOD=1e9+7;
int n,m,fa[N],st1[N],st2[M],ans=0;
pii G[M];
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
int chk(){
	int cnt=0;
	FOR(i,1,n)cnt+=st1[i];
	if(!cnt)return 0;
	FOR(t,1,m){
		if(st2[t])continue;
		FOR(i,1,n)fa[i]=i;
		FOR(i,1,m){
			int u=G[i].fir,v=G[i].sec;
			if(i==t||!st1[u]||!st1[v])continue;
			if(find(u)!=find(v))fa[find(u)]=find(v);
		}
		cnt=0;
		FOR(i,1,n)cnt+=st1[i]&(i==find(i));
		if(cnt^1)return 0;
	}
	return 1;
}
void dfs2(int x){
	if(x>m)return ans=(ans+chk())%MOD,void();
	st2[x]=1,dfs2(x+1),st2[x]=0,dfs2(x+1);
}
void dfs1(int x){
	if(x>n)return dfs2(1),void();
	st1[x]=1,dfs1(x+1),st1[x]=0,dfs1(x+1);
}
signed main(){
	freopen("test.in","r",stdin),freopen("test.out","w",stdout);
	n=rd(),m=rd();
	FOR(i,1,m){
		int u=rd(),v=rd();
		G[i]={u,v};
	}
	dfs1(1);
	print(ans,'\n');
	return 0;
}
2024/11/27 12:15
加载中...