CSU1659: Graph Center(最短路)
来源:互联网 发布:ubuntu网络连接不上 编辑:程序博客网 时间:2024/06/05 05:27
Description
The center of a graph is the set of all vertices of minimum eccentricity, that is, the set of all vertices A where the greatest distance d(A,B) to other vertices B is minimal. Equivalently, it is the set of vertices with eccentricity equal to the graph's radius. Thus vertices in the center (central points) minimize the maximal distance from other points in the graph.
------wikipedia
Now you are given a graph, tell me the vertices which are the graph center.
Input
There are multiple test cases.
The first line will contain a positive integer T (T ≤ 300) meaning the number of test cases.
For each test case, the first line contains the number of vertices N (3 ≤ N ≤ 100) and the number of edges M (N - 1 ≤ N * (N - 1) / 2). Each of the following N lines contains two vertices x (1 ≤ x ≤ N) and y (1 ≤ y ≤ N), meaning there is an edge between x and y.
Output
The first line show contain the number of vertices which are the graph center. Then the next line should list them by increasing order, and every two adjacent number should be separated by a single space.
Sample Input
24 31 31 22 45 51 41 32 42 34 5
Sample Output
21 231 2 4
HINT
Source
#include <iostream>#include <stdio.h>#include <string.h>#include <string>#include <stack>#include <queue>#include <map>#include <set>#include <vector>#include <math.h>#include <bitset>#include <list>#include <algorithm>#include <climits>using namespace std;#define lson 2*i#define rson 2*i+1#define LS l,mid,lson#define RS mid+1,r,rson#define UP(i,x,y) for(i=x;i<=y;i++)#define DOWN(i,x,y) for(i=x;i>=y;i--)#define MEM(a,x) memset(a,x,sizeof(a))#define W(a) while(a)#define gcd(a,b) __gcd(a,b)#define LL long long#define N 200005#define INF 0x3f3f3f3f#define EXP 1e-8#define lowbit(x) (x&-x)const int mod = 1e9+7;const int L = 10005;struct Edges{ int x,y,w,next;} e[L<<2];int head[L],n,m;int dis[L];int vis[L];int cnt[L],hash[L],ss[L];int s[L];void init(){ memset(e,-1,sizeof(e)); memset(head,-1,sizeof(head));}void AddEdge(int x,int y,int w,int k){ e[k].x = x,e[k].y = y,e[k].w = w,e[k].next = head[x],head[x] = k;}int relax(int u,int v,int c){ if(dis[v]>dis[u]+c) { dis[v] = dis[u]+c; return 1; } return 0;}int SPFA(int src){ int i; memset(vis,0,sizeof(vis)); for(int i = 0; i<=n; i++) dis[i] = INF; dis[src] = 0; queue<int> Q; Q.push(src); vis[src] = 1; while(!Q.empty()) { int u,v; u = Q.front(); Q.pop(); vis[u] = 0; for(i = head[u]; i!=-1; i=e[i].next) { v = e[i].y; if(relax(u,v,e[i].w)==1 && !vis[v]) { Q.push(v); vis[v] = 1; } } } int maxn = -1; for(i = 1; i<=n; i++) maxn = max(maxn,dis[i]); return maxn;}int ans[L],tot,p[N];int main(){ int t,u,v,i,j,k; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); init(); for(i = 0; i<2*m; i+=2) { scanf("%d%d",&u,&v); AddEdge(u,v,1,i); AddEdge(v,u,1,i+1); } int minn = INF; for(i = 1; i<=n; i++) { p[i] = SPFA(i); minn = min(p[i],minn); } tot = 0; for(i = 1; i<=n; i++) { if(p[i]==minn) ans[tot++] = i; } printf("%d\n",tot); for(i = 0; i<tot; i++) { if(i) printf(" "); printf("%d",ans[i]); } printf("\n"); } return 0;}
- CSU1659: Graph Center(最短路)
- sgu226:Colored graph(最短路)
- GBX的Graph(最短路)
- hdu 4034 Graph 最短路Floyed
- [HDOJ 4984] Goffi and Graph [最短路]
- hdu 4034 Graph(深化最短路floyd)
- HDU 4034Graph floyd 最短路
- hdu5876 Sparse Graph(补图+最短路)
- hdu5876 Sparse Graph(最短路)
- hdu5876Sparse Graph(求补图的最短路)
- Codeforces715B-Complete The Graph(最短路)
- 【最短路】Graph practice T2 drive 题解
- hdu5876 Sparse Graph(bfs最短路)
- HLG1349 Graph 给出最短路求出原图最少边数
- 【HDU】4725 The Shortest Path in Nya Graph 最短路
- 【最短路】 HDU 4725 The Shortest Path in Nya Graph
- CF 505B Mr. Kitayuta's Colorful Graph(最短路)
- hdu 4725 The Shortest Path in Nya Graph(最短路)
- Java集合2:HashSet的实现原理
- 黑马程序员--C语言关键字,注释
- 打开CCS5 出现locking is not possible in the directory
- 黑马程序员--递归方法参数的自增自减
- Java集合3:LinkedHashMap的实现原理
- CSU1659: Graph Center(最短路)
- Java中Unicode编码和汉字之间的转换
- HelloVelocity
- 用PowerShell把东西pin到开始菜单上
- Java集合4:LinkedHashSet的实现原理
- 路遥《人生》读后感
- C++文件读写详解(ofstream,ifstream,fstream)
- Java集合5:LinkedHashMap与LRU cache
- Java集合6:ArrayList的实现原理