HDU 5876 Sparse Graph
来源:互联网 发布:java输出多个变量 编辑:程序博客网 时间:2024/05/29 18:02
Sparse GraphTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1489 Accepted Submission(s): 521Problem DescriptionIn 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 N−1 other vertices.InputThere 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.OutputFor 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 Input12 01Sample Output1
水题啊…..英语不好 网赛的时候瞄了几眼 就没看下去了…..
用链表记录还没到过的点 到一个删一个
set<pair<int,int> >
记录原图中有的边(不可通过的边)
BFS跑一遍 其实最多才进行n+m次松弛操作
#include<iostream>#include<stdlib.h>#include<stdio.h>#include<string>#include<vector>#include<deque>#include<queue>#include<algorithm>#include<set>#include<map>#include<stack>#include<time.h>#include<math.h>#include<list>#include<cstring>#include<fstream>#include<bitset>//#include<memory.h>using namespace std;#define ll long long#define ull unsigned long long#define pii pair<int,int>#define INF 1000000007const int N=200000+5;set<pii>exist;int dis[N];list<int>ls;void bfs(int s,int n){ fill(dis,dis+n+1,-1); ls.clear(); for(int i=1;i<=n;++i) if(i!=s) ls.push_back(i); deque<int>de; de.push_back(s); dis[s]=0; while(!de.empty()){ int fr=de.front(); de.pop_front(); if(ls.empty()) break; for(list<int>::iterator it=ls.begin();it!=ls.end();){ if(exist.find({*it,fr})!=exist.end()) ++it; else{ de.push_back(*it); dis[*it]=dis[fr]+1; list<int>::iterator tmp=it; ++it; ls.erase(tmp); } } }}int main(){ //freopen("/home/lu/文档/r.txt","r",stdin); //freopen("/home/lu/文档/w.txt","w",stdout); int t,n,m,u,v,s; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); exist.clear(); while(m--){ scanf("%d%d",&u,&v); exist.insert({u,v}); exist.insert({v,u}); } scanf("%d",&s); bfs(s,n); bool flag=false; for(int i=1;i<=n;++i){ if(i!=s){ if(flag==false) flag=true; else printf(" "); printf("%d",dis[i]); } } putchar('\n'); } return 0;}
0 0
- HDU 5876 Sparse Graph
- hdu-5876-Sparse Graph
- HDU-5876 Sparse Graph
- HDU 5876 - Sparse Graph
- HDU 5876 Sparse Graph
- Sparse Graph(HDU 5876)
- HDU 5876 Sparse Graph
- HDU 5876Sparse Graph (补图上BFS)
- HDU 5876 Sparse Graph(bfs+set)
- HDU 5876 大连网络赛 Sparse Graph
- hdu 5876 Sparse Graph 补图单源最短路
- HDU 5876 Sparse Graph (补图找最短路/BFS)
- HDU 5876 Sparse Graph 补图BFS
- HDU-5876-Sparse Graph(BFS)
- hdu 5876 Sparse Graph(补图最短路)
- HDU 5876 Sparse Graph 大连网络赛
- HDU 5876 Sparse Graph(bfs)
- hdu 5876 Sparse Graph 补图最短路
- win10系统安装pyopencl攻略
- 前端开发面试题——HTML篇
- 原生js封装ajax方法
- Linux CentOS下EPEL源的安装
- dhcp_start
- HDU 5876 Sparse Graph
- LeetCode考题查询目录
- apache自签名证书
- 安卓自定义View进阶-Matrix Camera
- uc/os-III任务管理总结
- C/C++ char或byte数组转化为int或int数组
- UML类图各箭头之间的关系
- 走近微软安全技术Shim
- Codeforces Round #371 (Div. 2) B. Filya and Homework