【图论】[ACM]嗅探器
来源:互联网 发布:js window.scroll 编辑:程序博客网 时间:2024/06/05 09:16
就是按照一个点作为根然后再这上面搞一下寻找割点,如果找到了,判断另一个点是不是在当前的割点的子树中(是相对于当前子树而言是一个割点)。如果在,那么就更新ans为最小值就行了
#include <cstdio>#include <algorithm>#include <vector>#include <cstring>#include <iostream>using namespace std;const int MAXN = 100;const int MAXM = 10000;struct node{ int v; node *next;}Edges[MAXM * 2 + 10], *adj[MAXN+10], *ecnt=Edges;int ver, ans=1000000000;void addedge(int u, int v){ ++ecnt; ecnt->v = v; ecnt->next = adj[u]; adj[u] = ecnt;}vector<int> vec;int dfn[MAXN+10], low[MAXN+10], dcnt, root;int cut[MAXN+10];bool have[MAXN+10];void dfs(int u, int fa){ dfn[u] = low[u] = ++dcnt; have[u] = u == ver; for(node *p=adj[u];p;p=p->next){ int v= p->v; if(!dfn[v]){ dfs(v, u); have[u] = have[v] || have[u]; low[u] = min(low[u], low[v]); if(low[v] >= dfn[u] && fa != -1){ if(have[v]) ans = min(ans, u); } }else if(v != fa) low[u] = min(low[u], dfn[v]); }}int main(){ int n, u; scanf("%d", &n); while(scanf("%d%d", &u, &ver)&&u&&ver){ addedge(u, ver); addedge(ver, u); } scanf("%d%d", &u, &ver); dfs(u, -1); if(ans != 1000000000){ printf("%d\n", ans); return 0; } printf("No solution\n"); return 0;}
0 0
- 【图论】[ACM]嗅探器
- ACM图论
- ACM-图论-拓扑排序
- ACM模板 图论
- 图论 ACM 算法竞赛
- ACM
- acm
- ACM
- acm
- ACM!!
- ACM!!
- acm
- ACM
- ACM
- acm
- acm
- ACM
- ACM
- 四大组件——广播——初次认识
- ARM处理器工作模式
- Swift:下划线及switch使用总结
- idea注册码
- Android基础入门教程——2.3.2 EditText(输入框)详解
- 【图论】[ACM]嗅探器
- hdu 5291 Candy Distribution 2015 Multi-University Training Contest 1
- nyoj744 蚂蚁的难题(-)
- hdu 1166 线段树
- JVM原理之JVM运行区域
- undefined reference to: xxx
- Android基础入门教程——3.2 基于回调的事件处理机制
- LeetCode Sudoku Solver
- 常量与只读变量