矿场搭建,不知道为什么,莫名其妙T了在212上,额,zyh数据真的坑。

bzoj200轻松跑过啊。

就是点双联通分量缩点,然后标记割点,一个块如果有>=2个割点,则不需要挖矿洞,

如果只有一割点,就乘以改块的大小-1

如果无割点,则乘以C(size,2);

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std; typedef long long ll;
const int NN=; int n,m;
int tim,top,root,scc;
int cnt,head[NN],rea[NN*],next[NN*];
int dfn[NN],low[NN],q[NN],instack[NN],gedian[NN],num[NN];
vector<int>a[NN]; void init()
{
n=tim=top=scc=;
memset(head,-,sizeof(head));
memset(dfn,,sizeof(dfn));
memset(gedian,,sizeof(gedian));
memset(num,,sizeof(num));
}
void add(int u,int v)
{
cnt++;
next[cnt]=head[u];
head[u]=cnt;
rea[cnt]=v;
}
void Tarjan(int u,int fa)
{
int num=;
dfn[u]=low[u]=++tim;
q[++top]=u,instack[u]=;
for (int i=head[u];i!=-;i=next[i])
{
int v=rea[i];
if (v==fa) continue;
if (dfn[v]==)
{
Tarjan(v,u);
low[u]=min(low[u],low[v]);
num++;
if (u==root&&num>) gedian[u]=;
else if (u!=root&&low[v]>=dfn[u]) gedian[u]=;
if (low[v]>=dfn[u])
{
scc++;
a[scc].clear();
int x=-;
while (x!=u)
{
x=q[top--];
instack[x]=;
a[scc].push_back(x);
}
q[++top]=u,instack[u]=;
}
}
else low[u]=min(low[u],dfn[v]);
}
}
long long c(int n,int m)
{
long long res=n*(n-)/;
return res;
}
int main()
{
int fzy=;
while(scanf("%d",&m)&&m)
{
fzy++;
init();
int x,y;
for (int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
n=max(x,n),n=max(y,n);
}
for (int i=;i<=n;i++)
if (dfn[i]==)
{
root=i;
Tarjan(i,-);
}
for (int i=;i<=scc;i++)
for (int j=;j<a[i].size();j++)
if (gedian[a[i][j]]) num[i]++;
long long ans1=,ans2=;
for (int i=;i<=scc;i++)
{
if (num[i]==)
{
ans1+=;
ans2*=c(a[i].size(),);
}
else if (num[i]==)
{
ans1+=;
ans2*=a[i].size()-;
}
}
printf("Case %d: %lld %lld\n",fzy,ans1,ans2);
}
return ;
}

bzoj2730(矿场搭建)的更多相关文章

  1. bzoj2730矿场搭建(Tarjan割点)

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1771  Solved: 835[Submit][Statu ...

  2. [BZOJ2730]矿场搭建

    Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...

  3. bzoj2730矿场搭建——点双连通分量

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2730 首先一遍tarjan找出割点,将图缩点,这些大点中如果有只包含一个割点的,那么如果这个 ...

  4. BZOJ2730 矿场搭建 解题报告 点双联通分量

    题意概述: 一张有向图,在其中设置一些关键点(即题目中的逃生出口),使得删除任意一个点之后其余点都可以到达至少一个关键点. 问至少需要设置多少中关键点,有多少种设置方法. 解析: 首先,这道题要求删掉 ...

  5. 【BZOJ2730】[HNOI2012]矿场搭建 Tarjan

    [BZOJ2730][HNOI2012]矿场搭建 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处. ...

  6. 【BZOJ-2730】矿场搭建 Tarjan 双连通分量

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1602  Solved: 751[Submit][Statu ...

  7. bzoj2730 [HNOI2012]矿场搭建 (UVAlive5135 Mining Your Own Business)

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1147  Solved: 528[Submit][Statu ...

  8. [BZOJ2730][HNOI2012]矿场搭建 点双 割点

    2730: [HNOI2012]矿场搭建 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2852  Solved: 1344[Submit][Stat ...

  9. BZOJ 2730: [HNOI2012]矿场搭建( tarjan )

    先tarjan求出割点.. 割点把图分成了几个双连通分量..只需dfs找出即可. 然后一个bcc有>2个割点, 那么这个bcc就不用建了, 因为一定可以走到其他救援出口. 只有一个割点的bcc就 ...

随机推荐

  1. Java内存模型_基础

    线程之间的通信机制有两种: 1.共享内存:线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式的通信. 2.消息传递:线程之间没有公共状态,线程之间必须发送消息来显示的进行通信 同步:是指程 ...

  2. wpf创建用户控件(计时器控件)

    在vs中新增用户控件 前台xaml如下代码: <UserControl x:Class="Zh.SelfServiceEquipment.UI.ZhControls.CountDown ...

  3. 解决nginx FastCGI sent in stderr: “Primary script unknown”

    今天重启了mac,突然发现本地的 lnmp 服务不能用了,什么请求都返回了: FastCGI sent in stderr: "Primary script unknown" 这个 ...

  4. Django视图,与数据库交互并返回数据

    环境:python 2.7.13  数据库:sqlite3(Django自带) 在学习Django的时候,遇到了困难.大概就是取到数据库数据后一直不能转成json数据.最后终于自己琢磨解决了. 要点就 ...

  5. eclipse如何把多个项目用不同的文件夹分隔开

    我们有时候用eclipse时,发现Project Explorer下有非常多的项目,如果大部分不用了还好,我们可以从eclipse上删掉,但是如果还经常会用到的话,删掉了,每次用的时候,还得再重新导入 ...

  6. 根据本周本月本日来查询数据 C#winform数据查询

    这个我是在winform的页面上做的 1. 首先是在页面上添加3个lable   第一次点击lable会有相应的数据被查询出来  第二次点击同一个lable会刷新所有的数据 2.点击不同的label会 ...

  7. CountDownLatch和CyclicBarrier 特点比较

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp79   并发编程中的CountDownLatch和CyclicBarri ...

  8. C和C++中的名字空间和作用域

    C和C++中的名字空间和作用域 C语言中有名字空间这个概念吗? 提到名字空间(或者可能更普遍的叫法,命名空间),很可能先想到的是C++,甚至是C#.C中没有名字空间吧?一开始我也是这样认为的,直到我看 ...

  9. MPLS LDP随堂笔记1

    LDP 的使用原因(对于不同协议来说) LDP的四大功能 发现邻居 hello 5s 15s 224.0.0.2 发现邻居关系 R1 UDP 646端口 R2 UDP 646端口 此时形成邻居 建立邻 ...

  10. 201521123091 《Java程序设计》第7周学习总结

    Java 第七周总结 第七周的作业. 目录 1.本章学习总结 2.Java Q&A 3.码云上代码提交记录及PTA实验总结 1.本章学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内 ...