Circle of Friends
来源:互联网 发布:淘宝助理官方网站下载 编辑:程序博客网 时间:2024/05/16 17:20
感觉强连通缩点越写越顺手了(笑
若是能在练习的时候每次都写一遍不要粘贴那真是极好的
强连通缩点后bfs求最短路
勉强算一个dfs套bfs?(笑
----------------------------我是代码的昏割线----------------------
#include<bits/stdc++.h>using namespace std;const int maxn = 112345;vector<int> edge[maxn];vector<int> dcc[maxn];int dfn[maxn],low[maxn],_cnt;int bel[maxn];stack<int> S;void init(int n){ for(int i=0;i<=n;i++){ edge[i].clear(); dcc[i].clear(); } memset(dfn,-1,sizeof(dfn)); memset(low,-1,sizeof(low)); memset(bel,-1,sizeof(bel)); _cnt = 0; while(S.empty()==false){ S.pop(); }}#define iter vector<int>::iteratorvoid dfs(int st){ dfn[st] = low[st] = _cnt++; S.push(st); for(iter it = edge[st].begin();it!=edge[st].end();it++){ int x = *it; if(dfn[x] == -1){ dfs(x); low[st] = min(low[st],low[x]); } else if(bel[x] == -1){ low[st] = min(low[st],dfn[x]); } } if(low[st] == dfn[st]){ while(S.top() != st){ bel[S.top()] = st; S.pop(); } bel[st] = st; S.pop(); }}int dis[maxn];queue<int> Q;int bfs(int st,int ed){ while(Q.empty()==false) Q.pop(); memset(dis,-1,sizeof(dis)); dis[st] = st; Q.push(st); while(Q.empty()==false){ st = Q.front(); Q.pop(); if(st == ed){ return dis[st]; } for(iter it = dcc[st].begin();it!=dcc[st].end();it++){ if(dis[*it] == -1){ dis[*it] = dis[st] +1; Q.push(*it); } } } return -1;}int main(){ int T; scanf("%d",&T); int n,m; while(T-- && ~scanf("%d %d",&n,&m)){ init(n); int x,y; while(m--){ scanf("%d %d",&x,&y); edge[x].push_back(y); } for(int i=0;i<n;i++){ if(dfn[i] == -1){ dfs(i); } } for(int i=0;i<n;i++){ for(iter it = edge[i].begin();it!=edge[i].end();it++){ int st = bel[i]; int ed = bel[*it]; if(st != ed){ dcc[st].push_back(ed); } } } printf("%d\n",bfs(bel[0],bel[n-1])); } return 0;}
0 0
- Circle of Friends
- Circle of Friends
- 东大oj-1591 Circle of friends
- sdut 3262 Circle of Friends tarjan
- sdut 3262 Circle of Friends (SCC缩点)
- 第6届山东省浪潮杯 Circle of Friends SDUT3262
- SDUT-3262-Circle of Friends(强连通分量)
- 第6届山东省浪潮杯 Circle of Friends SDUT3262
- 山东第六届省赛Circle of Friends(强联通缩点最短路)
- 山东省第六届ACM省赛题——Circle of Friends(强连通分量+dfs)
- SDUT 3262 Circle of Friends【强连通Tarjan+缩点染色+最短路SPFA】
- sdut 3262 Circle of Friends (SCC缩点) 有向图 强连通分量模板
- Circle of Winter
- Circle of Winter
- The Definition Of Friends
- Friends of Google internship
- pku2242The Circumference of the Circle
- URAL 1640. Circle of Winter
- hdoj 2188 悼念512汶川大地震遇难同胞——选拔志愿者【巴什博弈】
- 播放gif控件 GifMovieView.java
- 详解Android动画之Tween Animation
- 设计模式之:备忘录模式(Memento)
- 《锋利的JQuery》读书笔记(三)
- Circle of Friends
- JS中的原型及原型链的一点总结
- define,require的基本用法
- Linux Shell的 &
- 三层架构实现登录——VB.NET版
- RGB颜色对照表
- 使用Android.Transition框架创建动画(1)
- 编程日常160127
- Ninject——依赖注入的轻量级框架(MVC框架下的使用)