HDU 5876 Sparse Graph2016 ACM/ICPC Asia Regional Dalian Online 1009
来源:互联网 发布:傲剑金蛇升级数据大全 编辑:程序博客网 时间:2024/05/16 23:42
【题意】对无向图的补图求最短路
BFS:
维护一个set,里面保存还没有被访问的节点,每次bfs的时候,把与点u相连的点排除,那么剩余的点在补图里都与点u可以有一条权为1的边,访问完之后即把这些点从set里删除。也就是说扩展节点时候,只扩展与u没有边相连的点,有相边相邻的点留在外面等下一次再扩展。
【代码】
#include<stdio.h>#include<stdlib.h>#include<cstdio>#include<cstring>#include<queue>#include<set>#include<algorithm>using namespace std;const int MAXN = 2e5 + 5;const int INF = 0x3f3f3f3f;typedef long long LL;int head[MAXN], e;LL dis[MAXN];int vis[MAXN];struct Edge{int v, nxt, w;}E[MAXN];int N, M, S;void init(){e = 1;memset(head, 0, (N + 1) * sizeof(int));memset(vis, 0, (N + 1) * sizeof(int));}void add(int u, int v, int w){E[e].v = v;E[e].w = w;E[e].nxt = head[u];head[u] = e++;}struct QNode{int v, c;QNode(int _v, int _c){v = _v; c = _c;}bool operator < (const QNode &a) const{return c>a.c;}};void BFS(int st, int n){set<int>ta, tb; //维护一个未BFS的集合,tb是tempqueue<int>Q; Q.push(st);dis[st] = 0;for (int i = 1; i <= n; i++) //初始化if (i != st)ta.insert(i);while (!Q.empty()){int u = Q.front(); Q.pop();for (int i = head[u]; i; i = E[i].nxt){ //把和u之间有边的点排除int v = E[i].v;if (!ta.count(v)) continue; ta.erase(v); tb.insert(v);}for (set<int>::iterator it = ta.begin(); it != ta.end(); it++){ //扩展Q.push(*it);dis[*it] = dis[u] + 1;}ta.swap(tb); //原ta里面除了tb里的没访问之外都访问了tb.clear();}}int main(void) {int T;while (scanf("%d", &T) != EOF){int i;int u, v;for (; T; T--){scanf("%d%d", &N, &M);init();for (i = 1; i <= M; i++){scanf("%d%d", &u, &v);add(u, v, 1); add(v, u, 1);}for (i = 1; i <= N; i++){dis[i] = INF;}scanf("%d", &S);BFS(S, N);bool first = true;for (i = 1; i <= N; i++){if (i == S)continue;if (false == first)printf(" ");first = false;if (dis[i] == INF)printf("-1");elseprintf("%d", dis[i]);}printf("\n");}}return 0;}
0 0
- HDU 5876 Sparse Graph2016 ACM/ICPC Asia Regional Dalian Online 1009
- HDU 5876Sparse Graph2016 ACM/ICPC Asia Regional Dalian Online 1009
- hdu 5876 Sparse Graph(补图最短路) 2016 ACM/ICPC Asia Regional Dalian Online 1009
- HDU 5876 Sparse Graph (补图BFS) 2016 ACM/ICPC Asia Regional Dalian Online
- HDU 5876 Sparse Graph 【补图最短路 BFS】(2016 ACM/ICPC Asia Regional Dalian Online)
- HDU 5876 Sparse Graph(2016 ACM/ICPC Asia Regional Dalian Online)
- 2016 ACM/ICPC Asia Regional Dalian Online Sparse Graph(BFS)
- HDU 5876 Sparse Graph(bfs求解补图中的单源最短路)——2016 ACM/ICPC Asia Regional Dalian Online
- HDU 5876 Sparse Graph(bfs求解补图中的单源最短路)——2016 ACM/ICPC Asia Regional Dalian Online
- hdu 5875 2016 ACM/ICPC Asia Regional Dalian Online 1008
- HDU 5875 Function 2016 ACM/ICPC Asia Regional Dalian Online
- HDU 5875 Function 2016 ACM/ICPC Asia Regional Dalian Online
- hdu 5875 2016 ACM/ICPC Asia Regional Dalian Online 1008
- hdu 5876 ACM/ICPC Dalian Online 1009 Sparse Graph
- 2016 ACM/ICPC Asia Regional Dalian Online
- 2016 ACM/ICPC Asia Regional Dalian Online
- HDU 5876 2016 ACM/ICPC Asia Regional Dalian Online BFS+set
- 补图+BFS( 邻接链表 )——HDU 5876 ( 2016 ACM/ICPC Asia Regional Dalian Online 1009 )
- 列车调度(PAT)
- ASIS CTF - 三个魔法Web关WriteUp
- HDU5869 Different GCD Subarray Query(线段树&&离线处理)
- Java异常处理细节
- Java--Connection
- HDU 5876 Sparse Graph2016 ACM/ICPC Asia Regional Dalian Online 1009
- Java SynchronizedMap ConcurrentMap ConcurrentHashMap
- 我的selenium日记2
- Android基础知识-Activity
- talend中变量的定义
- 实训阶段总结(五)
- CSS居中和多列布局
- leetcode 32. Longest Valid Parentheses __ java
- Rsync的其他几个常见参数