題解:
一道水題交了5次才過……
只需考慮刪去的點是割點的情況。
刪去所有割點,形成若干聯通塊,假如圖中只有乙個聯通塊,則需設定兩個出口。
若乙個聯通塊可以到達兩個割點,則該聯通塊內不必設定出口,否則必須設定出口。
方案數利用乘法原理計算即可。
一定要注意細節。 co
de: cod
e:
#include
#include
#include
#include
#include
#include
#include
#define n 100005
#define ll long long
using
namespace
std;
int low[n],dfn[n],deep,flag[n],head[n],tot,vis[n],b[n],a[n],cnt,sum,c[n];
struct node
edge[n];
void add(int u,int v)
void tarjan(int u,int father)
else
if(v!=father)low[u]=min(low[u],dfn[v]);
}if(father==-1&&son==1)flag[u]=false;
}void dfs(int u)
}int main()
deep=0;
memset(dfn,0,sizeof(dfn));
memset(flag,false,sizeof(flag));
for(int i=1;i<=n;i++)
if(!dfn[i])tarjan(i,-1);
memset(vis,true,sizeof(vis));
int p=0;
for(int i=1;i<=n;i++)
if(flag[i])vis[i]=false;
for(int i=1;i<=n;i++)
}int ans1;ll ans2;
if(p==1)
else
printf("case %d: %d %lld\n",++tt,ans1,ans2);
scanf("%d",&m);
}return
0;}
bzoj 2730 HNOI2012 礦場搭建
description 煤礦工地可以看成是由隧道連線挖煤點組成的無向圖。為安全起見,希望在工地發生事故時所有挖煤點的工人都能有一條出路逃到救援出口處。於是礦主決定在某些挖煤點設立救援出口,使得無論哪乙個挖煤點坍塌之後,其他挖煤點的工人都有一條道路通向救援出口。請寫乙個程式,用來計算至少需要設定幾個救...
BZOJ 2730 HNOI2012 礦場搭建
time limit 10 sec memory limit 128 mb submit 2340 solved 1086 submit status discuss 煤礦工地可以看成是由隧道連線挖煤點組成的無向圖。為安全起見,希望在工地發生事故時所有挖煤點的工人都能有一條出路逃到救援出口處。於是礦...
bzoj2730 HNOI2012 礦場搭建
容易看出是雙聯通。and then?割點!終於有題證明了low x min low x dfn y 不能改成low y 了 然後不會做 對強聯通理解不夠深刻 先把每個聯通塊割點數弄出來,再找一次每個聯通塊 include include include include include include...