新手第一次尝试紫题,不知道为什么错这么多,求调
#include<bits/stdc++.h>
using namespace std;
int n,m,p;
vector<int>g[16];
bool c(vector<bool>&s){
int x=-1;
for(int i=1;i<=n;i++)if(s[i]){x=i;break;}
if(x==-1)return 1;
vector<bool>v(n+1);
queue<int>q;
q.push(x);
v[x]=1;
while(!q.empty()){
int u=q.front();
q.pop();
for(int y:g[u])if(s[y]&&!v[y])v[y]=1,q.push(y);
}
for(int i=1;i<=n;i++)if(s[i]&&!v[i])return 0;
return 1;
}
int main(){
cin>>n>>m>>p;
for(int i=0;i<m;i++){
int a,b;
cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
long long r=0;
for(int k=0;k<(1<<n);k++){
vector<bool>s(n+1);
int t=0;
for(int i=1;i<=n;i++)if(k&(1<<(i-1)))s[i]=1,t++;
if(!t){
long long w=1;
for(int i=0;i<m;i++)w=w*2%p;
r=(r+w)%p;
continue;
}
if(!c(s))continue;
int f=0;
for(int u=1;u<=n;u++){
if(!s[u])continue;
for(int y:g[u])if(y>u&&s[y])f++;
}
int e=m-f;
long long w=1;
for(int i=0;i<f;i++)w=w*2%p;
for(int i=0;i<e;i++)w=w*2%p;
r=(r+w)%p;
}
cout<<r;
}
每个军营两种状态,枚举所有状态复杂度2n,理论上可以过测试数据,不知道为什么全错了,希望有dalao能帮我改改