HDU-4460 Friend Chains(BFS&权为1所有最短路的最大值)
题目:
For a group of people, there is an idea that everyone is equals to or less than 6 steps away from any other person in the group, by way of introduction. So that a chain of "a friend of a friend" can be made to connect any 2 persons and it contains no more than 7 persons.
For example, if XXX is YYY’s friend and YYY is ZZZ’s friend, but XXX is not ZZZ's friend, then there is a friend chain of length 2 between XXX and ZZZ. The length of a friend chain is one less than the number of persons in the chain.
Note that if XXX is YYY’s friend, then YYY is XXX’s friend. Give the group of people and the friend relationship between them. You want to know the minimum value k, which for any two persons in the group, there is a friend chain connecting them and the chain's length is no more than k .
input:
There are multiple cases.
For each case, there is an integer N (2<= N <= 1000) which represents the number of people in the group.
Each of the next N lines contains a string which represents the name of one people. The string consists of alphabet letters and the length of it is no more than 10.
Then there is a number M (0<= M <= 10000) which represents the number of friend relationships in the group.
Each of the next M lines contains two names which are separated by a space ,and they are friends.
Input ends with N = 0.
output:
For each case, print the minimum value k in one line.
If the value of k is infinite, then print -1 instead.
Sample input:
3
XXX
YYY
ZZZ
2
XXX YYY
YYY ZZZ
0
Sample output:
2
题意:
多组输入,第一行给一个n然后输入n个结点(字符串,用map转为int),然后输入一个m代表m条路,然后输入m组数据代表两个点直接有一条路,所有路权值都为1,输出任意两个结点最短路之中的最大值,如果有两个结点之间没有路,那么输出-1。
分析:
对每个点bfs搜最短路,用dis[i][j]代表i结点到j结点的距离,刚开始全部初始化为inf,dis[i][i] = 0。对每个点搜完后对所有最短路遍历,记录最大值ans,如果ans为inf就输出-1,否则输出ans。
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+5;
const int inf = 0x3f3f3f3f;
int vis[maxn],dis[maxn][maxn],ans = 0;
vector<int> v[maxn];
void bfs(int u){
dis[u][u] = 0;
memset(vis,0,sizeof vis);
queue<int> q;
vis[u] = 1;
q.push(u);
while (!q.empty()){
int tmp = q.front();
q.pop();
int len = v[tmp].size();
for (int i = 0; i < len; i++){
int to = v[tmp][i];
if (!vis[to]){
dis[u][to] = dis[u][tmp] + 1;
vis[to] = 1;
q.push(to);
}
}
}
}
int main(void){
int n,m;
map<string,int> mp;
char str1[15],str2[15];
while (scanf("%d",&n),n){
for (int i = 0; i < n; i++)v[i].clear();
ans = 0;
for (int i = 1; i <= n; i++){
scanf("%s",str1);
mp[str1] = i;
}
scanf("%d",&m);
for (int i = 1; i <= m; i++){
scanf("%s%s",str1,str2);
v[mp[str1]].push_back(mp[str2]);
v[mp[str2]].push_back(mp[str1]);
}
for (int i = 1; i <= n; i++){
for (int j = i+1; j <= n; j++){
dis[i][j] = dis[j][i] = inf;
}
}
for (int i = 1; i <= n; i++)
bfs(i);
for (int i = 1; i <= n; i++){
for (int j = i+1; j <= n; j++){
if (dis[i][j] > ans) ans = dis[i][j];
}
}
printf("%d\n",ans==inf?-1:ans);
}
return 0;
}
需要注意点:
此题用链式前向星TLE,需要改为vector存边,原因不详
此题还可以用类似求树的直径的做法求解(未尝试,有待确认),速度更快
HDU-4460 Friend Chains(BFS&权为1所有最短路的最大值)的更多相关文章
- HDU 4460 Friend Chains --BFS
题意:问给定的一张图中,相距最远的两个点的距离为多少.解法:跟求树的直径差不多,从1 开始bfs,得到一个最远的点,然后再从该点bfs一遍,得到的最长距离即为答案. 代码: #include < ...
- HDU 4460 Friend Chains (BFS,最长路径)
题意:给定 n 个人,和关系,问你这个朋友圈里任意两者之间最短的距离是多少. 析:很明显的一个BFS,只要去找最长距离就好.如果不能全找到,就是-1. 代码如下: #pragma comment(li ...
- HDU 4460 Friend Chains(map + spfa)
Friend Chains Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...
- HDU 4460 Friend Chains
Problem Description For a group of people, there is an idea that everyone is equals to or less than ...
- HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)
题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...
- [HDU 3712] Fiolki (带边权并查集+启发式合并)
[HDU 3712] Fiolki (带边权并查集+启发式合并) 题面 化学家吉丽想要配置一种神奇的药水来拯救世界. 吉丽有n种不同的液体物质,和n个药瓶(均从1到n编号).初始时,第i个瓶内装着g[ ...
- hdu 4460 第37届ACM/ICPC杭州赛区H题 STL+bfs
题意:一些小伙伴之间有朋友关系,比如a和b是朋友,b和c是朋友,a和c不是朋友,则a和c之间存在朋友链,且大小为2,给出一些关系,求出这些关系中最大的链是多少? 求最短路的最大距离 #include& ...
- hdu 1565&hdu 1569(网络流--最小点权值覆盖)
方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- hdu 2102 A计划-bfs
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
随机推荐
- 杂记 -- 关于ref、kepp-alive、nextTick、fetch
1.ref:定义一个普通的dom节点或一个vue的组件实例对象 定义方法: <div class="page1"> <button @click="li ...
- 168-PHP 输出系统当前时间
<body style="font-family:'华文彩云'; color:#0000CC; font-size:20px"> 系统的当前时间是: <?php ...
- rsync错误
rsync error:No route to host rsync服务端开启的iptables防火墙 [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_ba ...
- django下载
pip install django ==2.0.5 创建目录 1创建目录 2终端下进入目录 3输入django-admin startproject project
- mac允许“任何来源”下载的应用
刚买的mac电脑,我们不止在App Store上下载,还会通过浏览器下载 有的时候需要下载一些破解的软件,这个时候安装会提示文件被破坏,很是头疼 不用着急,这是因为mac会判断app如果被破坏,就不允 ...
- 不同DIV滚动条如何同步?
$(".DIV").scroll(function(){ $(".target").scrollLeft($(".DIV ").scrol ...
- javascript设计模式(1)——面向对象基础
用对象收编变量2种方式 1 函数式 var Object = { name:function(){ return this; }, email:function(){ return this; } } ...
- 剑指offer_2.1_Day_5
输入一个链表,按链表从尾到头的顺序返回一个ArrayList. import java.util.ArrayList; public class Solution { public ArrayList ...
- centos7 lvm合并分区脚本初探-linux性能测试 -centos7修改网卡名字-jdk环境安装脚本-关键字查询文件-批量添加用户
1.#!/bin/bash lvmdiskscan | grep centos > /root/a.txt a=`sed -n '1p' /root/a.txt` b=`sed -n '2p' ...
- DevOps专题|Lua引擎打造超轻量级客户端
Lua 作为一门轻量级脚本语言,源码使用标准C语言发布,语法简洁,非常适合嵌入式.客户端.游戏等场景. Lua引擎语言特点 轻量级 源码简单,以lua最新版5.3.5为例,加上lua自身提供的lib库 ...