【题】【图论(割点)】NKOJ 3648 嗅探器
来源:互联网 发布:山东服务器数据恢复 编辑:程序博客网 时间:2024/06/15 11:34
NKOJ 3648 嗅探器
时间限制 : 10000 MS 空间限制 : 65536 KB
问题描述
某军搞信息对抗实战演习.红军成功地侵入了蓝军的内部网络.蓝军共有两个信息中心.红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息.但是蓝军的网络相当的庞大,数据包从一个信息中心传到另一个信息中心可以不止有一条通路.现在需要你尽快地解决这个问题.应该把嗅探器安装在哪个中间服务器上才能保证所有的数据包都能被捕获?
输入格式
第一行一个整数n(1<=n<=100),表示蓝军网络中服务器的数目.
接下来若干行是对蓝军网络的拓扑结构描述.每行是两个整数i,j表示编号为I和编号为j的两台服务器间存在连接(显然连接是双向的).
服务器的编号从1开始.描述一两个0结束.
再接下来一行是两个整数a,b分别表示两个中心服务器的编号
输出格式
如果有多个解输出编号最小的一个.
如果找不到任何解,输出”No solution”.
样例输入
样例1:
5
2 1
2 5
1 4
5 3
2 3
5 1
0 0
4 2
样例2:
5
1 2
1 3
1 4
2 5
5 3
0 0
2 3
样例3
7
1 2
2 3
3 4
4 5
3 6
5 4
4 1
2 7
0 0
1 5
样例输出
样例1:
1
样例2:
No solution
样例3:
4
来源 zjoi2004
思路:
所求点一定为割点,但割点不一定是所求点。所求点应该是将a、b分隔开的割点。
所以从a出发,每次求出一个割点时若b在该点子树中,则将该点标记,最后输出被标记点的最小编号
#include<cstdio>#include<iostream>#include<vector>using namespace std;const int need=103;#define pb push_backstruct fy{ int la,en; fy (int a,int b){this->la=a,this->en=b;}} ;int s,e;bool cut[need];//..........................................................................................vector<fy> w;int tot,fi[need];void add(int a,int b){ tot++; w.pb(fy(fi[a],b)); fi[a]=tot;}//..........................................................................................int dfn[need],low[need],vtime;bool tarjan(int x,int fx){ dfn[x]=low[x]=++vtime; bool ans=false,temp;//ans记录x所有儿子中有无子孙含b,temp记录当次讨论的儿子的子孙中有无含b for(int t=fi[x],y;t;t=w[t].la) { y=w[t].en; if(!dfn[y]) { temp=tarjan(y,x); if(temp) ans=true; low[x]=min(low[x],low[y]); if(dfn[x]<=low[y]&&x!=s&&temp) cut[x]=true; } else if(y!=fx) low[x]=min(low[x],dfn[y]); } return x==e ? true : ans;}//.......................................................................................... int main(){ w.pb(fy(0,0)); int n;scanf("%d",&n); for(int a,b;;) { scanf("%d%d",&a,&b); if(a==0&&b==0) break; add(a,b),add(b,a); } scanf("%d%d",&e,&s); tarjan(s,0); for(int i=1;i<=n;i++) { if(cut[i]&&i!=e&&i!=s) { printf("%d",i); return 0; } } printf("No solution");}
0 0
- 【题】【图论(割点)】NKOJ 3648 嗅探器
- 图论,割点求法
- 图论-割点数目
- 【学习笔记】图论 割点 割边
- 图论——割点
- 割点、割边
- 割点、割边
- 割点 割边
- 割点、割边
- 割点
- 割点
- 割点
- 割点
- 【割点】
- 割点
- 割点
- 割点
- 【题】【图论】NKOJ 3556 信息传递
- 抓重点学Gradle
- MySQL 外连接、内连接与⾃连接的区别
- Android中的线程池简介
- org.springframework.beans.factory.BeanDefinitionStoreException 与at org.springframework.asm.ClassRead
- Spring+c3p0+MySql5.7整合出现的Bug
- 【题】【图论(割点)】NKOJ 3648 嗅探器
- Android Studio添加代码头注释使用总结
- Activity详解(2.属性)
- 渗透之wifi破解
- 1.深度学习框架——TensorFlow的安装与入门
- Hadoop(01) 伪分布式搭建
- <机器学习笔记-03><scikit-learn 03>特征提取
- U-BOOT-2016.07移植 (第二篇) 添加单板
- 算法网站