csu - 1659 Graph Center(最短路)

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1659

题意是找一个图的中心,图的中心定义是某一个点到其他点的最大距离最小,如果有多个排序输出.

注意这里大到其他点的距离是找一个最短的距离,那么就转化成了最短路的问题,求出每个点与其它点的最大距离,

保存并且求出最大距离中的最小距离,然后判断有几个点满足条件输出即可.

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cmath>
  4 #include <vector>
  5 #include <cstring>
  6 #include <string>
  7 #include <algorithm>
  8 #include <string>
  9 #include <set>
 10 #include <functional>
 11 #include <numeric>
 12 #include <sstream>
 13 #include <stack>
 14 #include <map>
 15 #include <queue>
 16 #include <deque>
 17 //#pragma comment(linker, "/STACK:102400000,102400000")
 18 #define CL(arr, val)    memset(arr, val, sizeof(arr))
 19
 20 #define ll long long
 21 #define INF 0x7f7f7f7f
 22 #define lc l,m,rt<<1
 23 #define rc m + 1,r,rt<<1|1
 24 #define pi acos(-1.0)
 25
 26 #define L(x)    (x) << 1
 27 #define R(x)    (x) << 1 | 1
 28 #define MID(l, r)   (l + r) >> 1
 29 #define Min(x, y)   (x) < (y) ? (x) : (y)
 30 #define Max(x, y)   (x) < (y) ? (y) : (x)
 31 #define E(x)        (1 << (x))
 32 #define iabs(x)     (x) < 0 ? -(x) : (x)
 33 #define OUT(x)  printf("%I64d\n", x)
 34 #define lowbit(x)   (x)&(-x)
 35 #define Read()  freopen("a.txt", "r", stdin)
 36 #define Write() freopen("b.txt", "w", stdout);
 37 #define maxn 110
 38 #define maxv 5010
 39 #define mod 1000000000
 40 using namespace std;
 41
 42 struct edge
 43 {
 44     int to,weight;
 45     edge() {}
 46     edge(int a,int b)
 47     {
 48         to=a;
 49         weight=b;
 50     }
 51 };
 52
 53 vector<edge>adjmap[maxv];
 54 bool in_queue[maxn];
 55 int dist[maxn];
 56 int n,m,p[maxn],ans[maxn];
 57
 58 int spfa(int a)
 59 {
 60     queue<int>que;
 61     for(int i=1;i<=n;i++)
 62     {
 63         in_queue[i]=false;
 64         dist[i]=INF;
 65     }
 66     que.push(a);
 67     dist[a]=0;
 68     in_queue[a]=true;
 69     while(!que.empty())
 70     {
 71         int x=que.front();que.pop();
 72         in_queue[x]=false;
 73         for(int i=0;i<adjmap[x].size();i++)
 74         {
 75             int to=adjmap[x][i].to;
 76             edge temp=adjmap[x][i];
 77             if(dist[x]<INF&&(dist[to]>dist[x]+temp.weight))
 78             {
 79                 if(!in_queue[to])
 80                 {
 81                     in_queue[to]=true;
 82                     dist[to]=dist[x]+temp.weight;
 83                     que.push(to);
 84                 }
 85             }
 86         }
 87     }
 88     int x=0;
 89     for(int i=1;i<=n;i++)
 90         x=max(x,dist[i]);
 91     return x;
 92 }
 93 int main()
 94 {
 95     //Read();
 96     int t,a,b;
 97     scanf("%d",&t);
 98     while(t--)
 99     {
100         scanf("%d%d",&n,&m);
101         for(int i=1;i<=n;i++) adjmap[i].clear();
102         for(int i=1;i<=m;i++)
103         {
104             scanf("%d%d",&a,&b);
105             adjmap[a].push_back(edge(b,1));
106             adjmap[b].push_back(edge(a,1));
107         }
108         int x=INF,j=0;
109         for(int i=1;i<=n;i++)
110         {
111             p[i]=spfa(i);
112             x=min(x,p[i]);
113         }
114         for(int i=1;i<=n;i++)
115         {
116             if(p[i]==x) ans[j++]=i;
117         }
118         printf("%d\n",j);
119         for(int i=0;i<j;i++)
120         {
121             if(i!=j-1) printf("%d ",ans[i]);
122             else printf("%d\n",ans[i]);
123         }
124     }
125     return 0;
126 }
时间: 2024-10-12 15:23:16

csu - 1659 Graph Center(最短路)的相关文章

CSU 1659: Graph Center(SPFA)

1659: Graph Center Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 63  Solved: 25 [Submit][Status][Web Board] 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

hdu 4034 Graph(深化最短路floyd)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034 Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submission(s): 2188    Accepted Submission(s): 1101 Problem Description Everyone knows how to calculat

HDU 5876 Sparse Graph BFS 最短路

Sparse Graph 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 notadjacent in G. Now you are given an undirected graph G of N n

Codeforces 716D - Complete The Graph(最短路)

题意:给定n个点,m条边,以及起点s,终点t,问你图中是否存在s->t的最短路为L,其中权值为0的可以任意修改. 思路:对给定的边分为2类,权重不为0的直接扔进去建图,权重为0的边先存起来.接着跑一遍堆优化的dij,如果dis[t]小于L,那么无论怎么修改权重0的边都没有办法凑出最短路L: 如果dis[t]=L,那么直接输出:如果dis[t]>L,则将原来事先存起来的边一条一条的加进去,权值设为1.每加一条边就跑一次dij,一旦找到dis[t]<=L,就可以终止并输出. PS:原来堆优化

HDU 4034 Graph Floyd最短路

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4034 题意: 给你一个最短路的表,让你还原整个图,并使得边最少 题解: 这样想..这个表示通过floyd得到的,那么如果从u到v没有小于等于边(u,v)的路径,那么边(u,v)就是必须的,否则从u到v需要走更远的路.如果有路径和边(u,v)是一样的,那么边(u,v)就是不需要的,这是因为,任何需要从u到v的路径都可以用另外一条代替.如果有小于边(u,v)的,那么这就是个非法的最短路表. 代码: #i

Codefroces 366 D Dima and Trap Graph (最短路)

Dima and Trap Graph 题意:Dima和Inna越来越喜欢对方,但是Dima的室友缺很没有热情出去玩,然后Dima就把他室友Seryozha骗进了陷阱里.现在Seryozha想要从陷阱里出来,每条路上有一个l,r, Seryozha在走路前可以选择一个X,然后每次通过一条路的时候都需要满足条件 l <= x <= r, 每次选定了一个X之后,这个X是一个定值,不会乱变,现求这样的X的数目一共有多少,如果为0就输出"Nick work Dima!",不然就输出

一个不靠谱的2D物理引擎(4) - 裁剪出碰撞点(manifold)

主要参考: http://www.codezealot.org/archives/394 , 建议阅读 第一篇已经解决了如何判断两个图形是否相交以及求嵌入深度. 之后还需要求两物体的接触点. 实际上物体的接触部分可以是一个面, 叫做manifold. 2D下就是一条线段. 对于两个多边形的碰撞, 首先要找出两个多边形相互离得最近的两条边. 在第一篇的修改版的getAxisLeastPenetration函数已经完成了这个工作. 把polyA和polyB相互交换作为该函数的参数执行2次, 取dis

Bars Example

Qt 5.10Qt Data VisualizationBars Example Qt 5.10.0 Reference Documentation ContentsRunning the ExampleCreating the ApplicationSetting up the GraphAdding Data to the GraphUsing Widgets to Control the GraphSelecting a Row/column by Clicking an Axis Lab

比只支有改给关方加山

但是傲世嗜血却还未来得及高兴便已经发现我平举追星弓一枚冰冷的铁箭直直的顶在他的脖子上 地将军威武必会横扫叛逆为我等报仇的 除此之外还盈余了各项资源超过点于是我选择建造了一个级的步兵营花掉了每种资源点几个民工出现敲敲打打建造从领地仓库了取出了木材石料等材料很快的一个简陋的草棚出现门前竖立着一排兵器架利剑大刀之类的兵器摆在上面 打开窗一股清香飘来是桂花树的香味远远可见院落里一棵绿树初秋正是桂花飘香的季节啊稻花香眼里有些血丝显然一夜睡眠都不是很好我自己绑了绷带了昨夜也没有照顾她不过既然稻花香离开林傲加