社区讨论
蒟蒻60ptsTLE+MLE+WA求助大佬
P8867[NOIP2022] 建造军营参与者 1已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lwbv4d59
- 此快照首次捕获于
- 2024/05/18 16:44 2 年前
- 此快照最后确认于
- 2024/05/18 19:18 2 年前
C
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+10,M = 1e6+10,md = 1e9+7;
int n,m,cnt,Siz,dfn[N],low[N],bri[M],f[N],siz[N],siz2[N];
long long int ans,dp[N][2],p[N];
vector<pair<int,int> > G[N];
vector<int> G2[N];
struct E{
int x;
int y;
}e[M];
int read(){
char ch=getchar(); int res=0;
while(!isdigit(ch)){ch=getchar();}
while(isdigit(ch)){res=(res<<1)+(res<<3)+ch-'0';ch=getchar();}
return res;
}
void Tarjan(int x,int fa){
dfn[x]=low[x]=++cnt;
for(int i=0;i<G[x].size();i++){
int v=G[x][i].first,id=G[x][i].second;
if(v==fa) continue;
if(dfn[v]==0){
Tarjan(v,x);
low[x]=min(low[x],low[v]);
if(dfn[x]<low[v]) bri[id]=bri[id^1]=1;
}
else{
low[x]=min(low[x],dfn[v]);
}
}
}
void dfs(int x,int w){
f[x]=w;
siz[w]++;
for(int i=0;i<G[x].size();i++){
int v=G[x][i].first,id=G[x][i].second;
if(f[v]==0&&bri[id]==0){
dfs(v,w);
}
}
}
void dfs2(int x,int fa){
dp[x][0]=1;
dp[x][1]=p[siz[x]]-1;
siz2[x]=1;
for(int i=0;i<G2[x].size();i++){
int v=G2[x][i];
if(v==fa) continue;
dfs2(v,x);
siz2[x]+=siz2[v];
long long int tmp=0,tmp2=0;
tmp=(dp[x][0]%md*dp[v][0]%md*2)%md;
tmp2=(dp[x][1]%md*dp[v][0]%md*2)%md;
tmp2=(tmp2+dp[x][1]%md*dp[v][1]%md)%md;
tmp2=(tmp2+dp[x][0]%md*dp[v][1]%md)%md;
dp[x][0]=tmp;
dp[x][1]=tmp2;
}
if(x!=1) ans=(ans+dp[x][1]%md*p[m-siz2[x]]%md)%md;
else ans=(ans+dp[x][1]%md*p[m-siz2[x]+1]%md)%md;
}
signed main(){
n=read();
m=read();
for(int i=1;i<=m;i++){
int x,y;
x=read();
y=read();
e[i].x=x;
e[i].y=y;
G[x].push_back(make_pair(y,i*2-1));
G[y].push_back(make_pair(x,i*2));
}
for(int i=1;i<=n;i++){
if(!dfn[i]){
Tarjan(i,i);
}
}
cnt=0;
for(int i=1;i<=n;i++){
if(!f[i]){
dfs(i,++cnt);
}
}
for(int i=1;i<=m;i++){
if(f[e[i].x]!=f[e[i].y]){
G2[f[e[i].x]].push_back(f[e[i].y]);
G2[f[e[i].y]].push_back(f[e[i].x]);
}
}
p[0]=1;
for(int i=1;i<=M/2;i++){
p[i]=(p[i-1]%md*2%md)%md;
}
dfs2(1,0);
cout<<ans<<endl;
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...