hdu5876 Sparse Graph(最短路)
来源:互联网 发布:淘宝网名龙堂 编辑:程序博客网 时间:2024/05/16 07:49
思路:一个很经典的题目,求补图的最短路,方法是建原图,然后用两个set维护还没 BFS 过的点。当要扩展点 u 的时候,遍历一次还没访问过的点 v,如果 uv 没边,那么将 v 入队。否则将 v 留在未扩展点中。
#include<bits/stdc++.h>using namespace std;const int maxn = 200000+7;vector<int>e[maxn];int n,m,s,dis[maxn];set<int>v1,v2;set<int>::iterator it;int main(){ int T;scanf("%d",&T);while(T--){ scanf("%d%d",&n,&m);for(int i = 0;i<=n;i++)e[i].clear();memset(dis,-1,sizeof(dis));v1.clear();v2.clear();for(int i = 1;i<=m;i++){int u,v;scanf("%d%d",&u,&v);e[u].push_back(v);e[v].push_back(u);}for(int i = 1;i<=n;i++)v1.insert(i);scanf("%d",&s);queue<int>q;q.push(s);dis[s]=0;v1.erase(s); while(!q.empty()){ int u = q.front();q.pop(); for(int i = 0;i<e[u].size();i++) { int v = e[u][i]; if(!v1.count(v)) continue; v1.erase(v); v2.insert(v); } for(it = v1.begin();it!=v1.end();it++) { q.push(*it); dis[*it]=dis[u]+1; } v1.swap(v2); v2.clear();}for(int i = 1;i<=n;i++){if(i==s)continue;printf("%d%c",dis[i],i==n?'\n':' ');}}}
Problem Description
In graph theory, the complement of a graph G is a graph H on the same vertices such that two distinct vertices of H are adjacent if and only if they are not adjacent in G .
Now you are given an undirected graphG of N nodes and M bidirectional edges of unit length. Consider the complement of G , i.e., H . For a given vertex S on H , you are required to compute the shortest distances from S to all N−1 other vertices.
Now you are given an undirected graph
Input
There are multiple test cases. The first line of input is an integer T(1≤T<35) denoting the number of test cases. For each test case, the first line contains two integers N(2≤N≤200000) and M(0≤M≤20000) . The following M lines each contains two distinct integers u,v(1≤u,v≤N) denoting an edge. And S (1≤S≤N) is given on the last line.
Output
For each of T test cases, print a single line consisting of N−1 space separated integers, denoting shortest distances of the remaining N−1 vertices from S (if a vertex cannot be reached from S, output ``-1" (without quotes) instead) in ascending order of vertex number.
Sample Input
12 01
Sample Output
1
Source
2016 ACM/ICPC Asia Regional Dalian Online
0 0
- hdu5876 Sparse Graph(最短路)
- hdu5876 Sparse Graph(bfs最短路)
- hdu5876 Sparse Graph(补图的最短路)
- hdu5876 Sparse Graph(补图+最短路)
- hdu5876 Sparse Graph(补图最短路)
- hdu5876 Sparse Graph(补图上求最短路)
- HDU5876 Sparse Graph 补图的最短路
- hdu5876 Sparse Graph -补图的最短路-bfs
- hdu5876——Sparse Graph(补图的最短路)
- hdu5876 Sparse Graph
- HDU5876-Sparse Graph
- hdu5876 Sparse Graph bfs + set
- HDU 5876 Sparse Graph(补图+BFS最短路)
- hdu 5876 Sparse Graph(补图最短路)
- Hdu 5876 Sparse Graph(补图最短路)
- Sparse Graph(2016大连网赛)(hdu5876)(BFS+数据结构)
- hdu5876(求补图的最短路,set用法)
- HDU 5876 Sparse Graph (另类BFS -- 补图的最短路)
- 【web】basic CSS(1)
- android studio中错误代码不提示问题
- ubuntu 系统 opencv3.1.0 安装
- HDU 1048 The Hardest Problem Ever(字符串处理)
- 读大话设计模式Gof后的总结
- hdu5876 Sparse Graph(最短路)
- CSV JDBC 数据库Parameter Junit
- freemarker中的list
- leetcode之104. Maximum Depth of Binary Tree(C++解法)
- [初级教程]arm-linux裸机开发之-bootstrap.bin的实现
- Longest Palindromic Substring
- 写了个高仿内涵段子,iosapp,源码。
- Ubuntu 安装myeclipse 2014GA 添加swap swap交换空间
- leetcode之27. Remove Element(C++解法)