博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
⌈洛谷5058⌋⌈ZJOI2004⌋嗅探器【Tarjan】
阅读量:4659 次
发布时间:2019-06-09

本文共 1996 字,大约阅读时间需要 6 分钟。

题目连接

题目描述

某军搞信息对抗实战演习,红军成功地侵入了蓝军的内部网络,蓝军共有两个信息中心,红军计划在某台中间服务器上安装一个嗅探器,从而能够侦听到两个信息中心互相交换的所有信息,但是蓝军的网络相当的庞大,数据包从一个信息中心传到另一个信息中心可以不止有一条通路。现在需要你尽快地解决这个问题,应该把嗅探器安装在哪个中间服务器上才能保证所有的数据包都能被捕获?

题解

题目给我们的第一感觉就是,这个点一定是割点。

终点(y)的dfn应该大于等于v点的dfn,因为要确保终点在v点或之后被访问到,即u点为必经的点。
终点(y)的low应该大于等于u点的dfn,因为要确保终点必须要经过u点。
一开始被这个\(e\)的重复找了好久的错误。诶

代码

#include 
#define ms(a, b) memset(a, b, sizeof(a))#define ll long long#define ull unsigned long long #define ms(a, b) memset(a, b, sizeof(a))#define inf 0x3f3f3f3f#define db double #define Pi acos(-1)#define eps 1e-8#define N 5005#define M 100005using namespace std;template
T sqr(T x) { return x * x; }template
void read(T &x) { x = 0; T fl = 1; char ch = 0; for (; ch < '0' || ch > '9'; ch = getchar()) if (ch == '-') fl = -1; for (; ch >= '0' && ch <= '9'; ch = getchar()) x = (x << 1) + (x << 3) + (ch ^ 48); x *= fl;}template
void write(T x) { if (x < 0) x = -x, putchar('-'); if (x > 9) write(x / 10); putchar(x % 10 + '0');}template
void writeln(T x) { write(x); puts(""); }struct edge { int to, nt;}E[M];int H[N], dfn[N], low[N];int sta, end, n, cnt = 0, tot = 0, ans = inf;void add_edge(int u, int v) { E[++ cnt] = (edge){v, H[u]}; H[u] = cnt;}void tarjan(int u) { dfn[u] = low[u] = ++ tot; for (int e = H[u]; e; e = E[e].nt) { int v = E[e].to; if (!dfn[v]) { tarjan(v); low[u] = min(low[u], low[v]); if (u != sta && u != end) if (dfn[u] <= low[v] && dfn[v] <= dfn[end] && low[end] >= dfn[sta]) ans = min(ans, u); } low[u] = min(low[u], dfn[v]); }}int main() { read(n); while (1) { int u, v; read(u); read(v); if (!u && !v) break; add_edge(u, v); add_edge(v, u); } read(sta); read(end); tarjan(sta); if (ans == inf) puts("No solution"); else writeln(ans); return 0;}

转载于:https://www.cnblogs.com/chhokmah/p/10660178.html

你可能感兴趣的文章
[转]优化Flash性能
查看>>
popStar手机游戏机机对战程序
查看>>
lambda表达式树
查看>>
二次注入原理及防御
查看>>
会话记住已登录功能
查看>>
Linux内核分析——可执行程序的装载
查看>>
第一阶段冲刺3
查看>>
父类引用指向子类对象
查看>>
网页如何实现下载功能
查看>>
IT男专用表白程序
查看>>
读《大道至简》第六章感想
查看>>
ef linq 中判断实体中是否包含某集合
查看>>
章三 链表
查看>>
Solution for Concurrent number of AOS' for this application exceeds the licensed number
查看>>
CSE 3100 Systems Programming
查看>>
IntelliJ IDEA 的Project structure说明
查看>>
Java Security(JCE基本概念)
查看>>
创建 PSO
查看>>
JasperReport报表设计4
查看>>
项目活动定义 概述
查看>>