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 graph G 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 N1 other vertices.
 

Input
There are multiple test cases. The first line of input is an integer T(1T<35) denoting the number of test cases. For each test case, the first line contains two integers N(2N200000) and M(0M20000). The following M lines each contains two distinct integers u,v(1u,vN) denoting an edge. And S (1SN) is given on the last line.
 

Output
For each of T test cases, print a single line consisting of N1 space separated integers, denoting shortest distances of the remaining N1 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
原创粉丝点击