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( ...
随机推荐
- 使用Oracle VM VirtualBox安装CentOS 7.6操作系统
使用Oracle VM VirtualBox安装CentOS 7.6操作系统 ...
- 编程入门-Eclipse的断点调试
编程入门-Eclipse的断点调试 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.双击选中你要调试的代码行数 2>.允许方法透视图 3>.进行代码调试 4& ...
- Database--事务
参考 https://segmentfault.com/a/1190000012669504?utm_source=tag-newest https://blog.csdn.net/qq_371559 ...
- Egret Engine 2D - 矢量绘图
绘制矩形 drawRect 绘制矩形边 lineStyle( 10, 0x00ff00 清空绘图 clear 绘制园形 drawCircle 绘制直线 moveTo lineTo 绘制曲线 cur ...
- ORACLE时间相关问题
一.遇到一个情况数据库存入的时间格式为20180831154546,需要将其转化为日期时分秒格式的. to_date('20180831154546', 'yyyy-mm-dd hh24:mi:ss' ...
- BZOJ 4901 [CTSC2017]网络
题解: 只会O(n log^2 n) O(n log n)先留坑 不开long long 0 分!!!! #include<iostream> #include<cstdio> ...
- springboot整合mybatis与thymeleaf
1.创建springboot项目 (1)选择Spring Initializr (2)填写自己的Group 与 Artifact (3)选择依赖框架 等待maven下载好依赖和插件即可 2.主配置文件 ...
- MySQL 字符集和校验规则工作流程
MySQL 字符集和校验规则工作原理 字符编码相关参数 数据流中的转码过程 校验规则 Tips:字符集和校验规则总是相伴的 一 从简单的建库语句开始 CREATE DATABASE [IF NOT E ...
- 图像算法五:【图像小波变换】多分辨率重构、Gabor滤波器、Haar小波
原 https://blog.csdn.net/alwaystry/article/details/52756051 图像算法五:[图像小波变换]多分辨率重构.Gabor滤波器.Haar小波 2018 ...
- 使用idea断点调试时出现no executable code found at line问题
问题描述 今天突然碰到了这样的一个问题: 使用断点调试时,断点的地方出现了一个叉号,而不是对勾,这就让我非常无奈了. 调了一天,终于把这个问题解决了,还是要记录一下的. 问题情况如下: 除了这里,de ...