loj10099 矿场搭建
传送门
分析
我们发现可以将这张图转换为一个联通块来处理。我们求出所有的割点。在求完之后我们我们对于每一个点双连通分量如果它没有割点相连则需要布置两个出口,因为可能有一个出口正好被割掉。而如果有一个割点我们只需要布置一个出口就行了,因为如果割掉割点可以从出口出去而如果割掉出口便可以通过割点到别的联通块中从而出去。而如果大于等于两个割点则无论如何都可以出去。至于方案数用组合数随便做一下就行了。
代码
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cctype> #include<cmath> #include<cstdlib> #include<queue> #include<ctime> #include<vector> #include<set> #include<map> #include<stack> using namespace std; long long dfn[520],low[520],is[520],cnt,n,m,ans,minn,vis[520],T,tot,siz; map<long long,long long>id; vector<long long>v[520]; inline void init(){for(int i=0;i<=500;i++)v[i].clear();id.clear();memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));memset(is,0,sizeof(is));memset(vis,0,sizeof(vis));ans=1;minn=0;cnt=0;n=0;T=0; } inline void tarjan(long long x,long long fa){dfn[x]=low[x]=++cnt;long long son=0;for(long long i=0;i<v[x].size();i++)if(v[x][i]!=fa){if(!dfn[v[x][i]]){son++;tarjan(v[x][i],x);low[x]=min(low[x],low[v[x][i]]);if(low[v[x][i]]>=dfn[x])is[x]=1;}else low[x]=min(low[x],dfn[v[x][i]]);}if(!fa&&son==1)is[x]=0;return; } inline void work(long long x){siz++;vis[x]=T;for(long long i=0;i<v[x].size();i++)if(!vis[v[x][i]]&&!is[v[x][i]])work(v[x][i]);else if(is[v[x][i]]&&vis[v[x][i]]!=T)tot++,vis[v[x][i]]=T; } int main(){long long i,j,k,t=0;scanf("%lld",&m);while(m){t++;init();for(i=1;i<=m;i++){long long x,y;scanf("%lld%lld",&x,&y);if(!id[x])id[x]=++n;if(!id[y])id[y]=++n;v[id[x]].push_back(id[y]);v[id[y]].push_back(id[x]);}for(i=1;i<=n;i++)if(!dfn[i])tarjan(i,0);for(i=1;i<=n;i++)if(!vis[i]&&!is[i]){T++;tot=0,siz=0;work(i);if(tot==0)minn+=2,ans*=(siz-1)*siz/2;else if(tot==1)minn+=1,ans*=siz;}printf("Case %lld: ",t);printf("%lld %lld\n",minn,ans);scanf("%lld",&m);}return 0; }
转载于:https://www.cnblogs.com/yzxverygood/p/9525096.html
loj10099 矿场搭建相关推荐
- 洛谷——P3225 [HNOI2012]矿场搭建
P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...
- 点双连通分量 [HNOI2012]矿场搭建
问题 F: [HNOI2012]矿场搭建 时间限制: 1 Sec 内存限制: 128 MB 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人 ...
- 矿场搭建(割点+找点联通分量)
G-[HNOI2012]矿场搭建_2022图论班第二章连通性例题与习题 (nowcoder.com) 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤 ...
- bzoj 2730: [HNOI2012]矿场搭建——tarjan求点双
Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...
- [BZOJ2730][HNOI2012]矿场搭建(求割点)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2730 分析: 如果坍塌的点不是割点,那没什么影响,主要考虑坍塌的点是割点的情况. 显然 ...
- P3225 [HNOI2012]矿场搭建
思路:$tarjan+组合$ 提交:1次 题解: 先$tarjan$求出割点,然后按连通块的性质分类讨论: 1.若没有与割点相连,则需要两个井,防止一个坏掉. 2.若有一个割点相连,修一个井,考虑井坏 ...
- Tarjan水题系列(2):HNOI2012 矿场搭建
题目: 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个挖煤点坍塌之后 ...
- P3225 [HNOI2012]矿场搭建 割点 tarjan 双联通分量
https://www.luogu.org/problemnew/show/P3225 题意 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一 ...
- LOJ洛谷P3225:矿场搭建(割点、点双)
文章目录 解析 代码 解析 我的实现不够简洁,导致bug越调越谜- 关键就是**找被割点分开的分量的方法:dfs!!! 一下子就豁然开朗了 代码 #include<bits/stdc++.h&g ...
- P3225-[HNOI2012]矿场搭建【tarjan,图论】
正题 题目链接:https://www.luogu.org/problemnew/show/P3225 题目大意 nnn个点的无向图,要求设置逃生点使得任意一个点去掉后每联通分量内都有一个逃生点.求至 ...
最新文章
- MyBatis 一个简单配置搞定数据加密解密!
- 计算机二级第十七套真题,2012年计算机二级VB第十七套上机试题及解析.doc
- 去除字符串中重复字符
- 【PAT (Advanced Level) Practice】1086 Tree Traversals Again (25 分)
- 64 bit Ubuntu support 32 bit binary
- 2009年上半年网络工程师考试下午试卷参考答案(二)
- 广州城市地图为android,广州无障碍地图
- 初识设计模式(装饰者模式)
- 解决pytorch RuntimeError: expected scalar type XXXX but found XXXX
- 游戏开发之C++IO流(C++基础)
- JSR规范系列(1)——Java版本、JSR规范和JCP社区流程概述
- 多种导出方式,教你快速将每个快递信息导出CSV表格
- 3dMax夜晚行车灯光轨迹一键生成插件TrafficTrails使用教程
- win10:如何设置电脑睡眠只息屏
- 完整的struts2框架应用实例
- 【HTML + CSS】如何引入icon图标
- 成人想补充蛋白质,光吃鸡蛋就够了?鸡蛋和蛋白粉哪个好一点?
- 【PCL】ICP 源码分析
- 2017网易有道校园招聘笔试题
- 【Windows自带的端口转发netsh interface portproxy,本机转发虚拟机】
热门文章
- cpuz北桥频率和内存频率_cpu-z里的注:频率是什么意思???高出内存频率
- 拉昆塔温德姆酒店中国首店即将亮相山东潍坊;复星旅文旗下Club Med落子北美市场 | 全球旅报...
- word字体号对应的磅数
- oracle中date错误,ORA-01830: date format picture ends before converting entire input string
- 问路在何方,路在脚下
- java 斜杠常量_Java基础之常量
- 彻底理解connection timeout
- Bat脚本-timeout 命令
- matlab设置角度和弧度制,matlab 可不可以用角度制不用弧度制?
- 计算机硬件系统包括哪几部分组成,计算机硬件系统由哪几部分组成