HDU 4460 Friend Chains --BFS
题意:问给定的一张图中,相距最远的两个点的距离为多少。
解法:跟求树的直径差不多,从1 开始bfs,得到一个最远的点,然后再从该点bfs一遍,得到的最长距离即为答案。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <map>
using namespace std;
#define N 100007 map<string,int> mp;
vector<int> G[];
int vis[],n,m,Maxdis,Maxtag;
struct node{
int dis,u;
}; void dfs(int u)
{
vis[u] = ;
for(int i=;i<G[u].size();i++)
{
int v = G[u][i];
if(!vis[v]) dfs(v);
}
} void bfs(int u)
{
queue<node> que;
memset(vis,,sizeof(vis));
node now;
now.dis = ;
now.u = u;
que.push(now);
vis[u] = ;
while(!que.empty())
{
int SZ = que.size();
while(SZ--)
{
node tmp = que.front();
que.pop();
int dis = tmp.dis;
int u = tmp.u;
if(dis > Maxdis)
{
Maxdis = dis;
Maxtag = u;
}
for(int i=;i<G[u].size();i++)
{
int v = G[u][i];
if(!vis[v])
{
now.u = v;
now.dis = dis+;
vis[v] = ;
que.push(now);
}
}
}
}
} int main()
{
int i,j;
string S;
while(scanf("%d",&n)!=EOF && n)
{
mp.clear();
for(i=;i<=n;i++)
{
cin>>S;
mp[S] = i;
G[i].clear();
}
scanf("%d",&m);
string A,B;
for(i=;i<=m;i++)
{
cin>>A>>B;
int a = mp[A], b = mp[B];
G[a].push_back(b);
G[b].push_back(a);
}
memset(vis,,sizeof(vis));
dfs();
int Link = ;
for(i=;i<=n;i++)
if(!vis[i]) Link = ;
if(!Link)
{
puts("-1");
continue;
}
Maxdis = , Maxtag = -;
bfs();
int S = Maxtag;
Maxdis = , Maxtag = -;
bfs(S);
printf("%d\n",Maxdis);
}
return ;
}
HDU 4460 Friend Chains --BFS的更多相关文章
- 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 4460 第37届ACM/ICPC杭州赛区H题 STL+bfs
题意:一些小伙伴之间有朋友关系,比如a和b是朋友,b和c是朋友,a和c不是朋友,则a和c之间存在朋友链,且大小为2,给出一些关系,求出这些关系中最大的链是多少? 求最短路的最大距离 #include& ...
- hdu 2102 A计划-bfs
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- HDU 1072(记忆化BFS)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1072 题目大意:走迷宫.走到装置点重置时间,到达任一点时的时间不能为0,可以走重复路,求出迷宫最短时 ...
- HDU 2364 (记忆化BFS搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2364 题目大意:走迷宫.从某个方向进入某点,优先走左或是右.如果左右都走不通,再考虑向前.绝对不能往 ...
- HDU 2579 (记忆化BFS搜索)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2579 题目大意:走迷宫.对于障碍点,只有当前(dep+1)%k才能走,问最少时间. 解题思路: 只有 ...
随机推荐
- SQL SERVER获取数据库文件信息
MS SQL SERVER 获取当前数据库文件等信息,适用于多个版本: SELECT dbf.file_id AS FileID , dbf.name AS [FileName] , s.fi ...
- SQL数据库基础(七)
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...
- C# 线程基础
1. 线程的基本概念 简单的讲进程就是程序分配在内存当中,等待处理器进行处理,请记住线程会消耗大量的操作系统资源.多个线程共享一个物理处理器将导致处理器忙于处理管理这些进程,而无法运行程序. 使用线程 ...
- 基于MATLAB实现的云模型计算隶属度
”云”或者’云滴‘是云模型的基本单元,所谓云是指在其论域上的一个分布,可以用联合概率的形式(x, u)来表示 云模型用三个数据来表示其特征 期望:云滴在论域空间分布的期望,一般用符号Εx表示. 熵:不 ...
- Mybatis学习记录(七)----Mybatis延迟加载
1.什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: ...
- R语言学习笔记:绘制地图
在R中画地图先从简单的maps包开始. library("maps") 在这个maps包中有一些数据集,用命令data(package=”maps”),可以看到如下数据: cana ...
- 安卓开发_浅谈Android动画(一)
动画效果,针对图片实现 现在学习四种基本的简单动画效果 一.Tween Animation共同属性 1.Duration:动画持续时间(毫秒单位) 2.fillAfter:设置为true,动画转化在动 ...
- 【读书笔记】iOS-GCD-使用方法
代码: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { dispatch_async(dispatch_get_gl ...
- 多种cell混合使用
有时候我们会碰到一个tableView上有多种cell,这个时候就需要定义多种cell,根据条件判断,当满足某个条件的时候选择某个cell 先看plist文件: Person.h #import &l ...
- UITabBarController 微信
AppDelegate.m #import "AppDelegate.h" #import "FirstViewController.h" #import &q ...