1837. Isenbaev's Number

Time limit: 0.5 second

Memory limit: 64 MB
Vladislav Isenbaev is a two-time champion of Ural, vice champion of TopCoder Open 2009, and absolute champion of ACM ICPC 2009. In the time you will spend reading this problem statement Vladislav would
have solved a problem. Maybe, even two…
Since Vladislav Isenbaev graduated from the Specialized Educational and Scientific Center at Ural State University, many of the former and present contestants at USU have known him for quite a few years.
Some of them are proud to say that they either played in the same team with him or played in the same team with one of his teammates…
Let us define Isenbaev's number as follows. This number for Vladislav himself is 0. For people who played in the same team with him, the number is 1. For people who weren't his teammates but
played in the same team with one or more of his teammates, the number is 2, and so on. Your task is to automate the process of calculating Isenbaev's numbers so that each contestant at USU would know their proximity to the ACM ICPC champion.

Input

The first line contains the number of teams n (1 ≤ n ≤ 100). In each of the following n lines you are given the names of the three members of the corresponding team. The names
are separated with a space. Each name is a nonempty line consisting of English letters, and its length is at most 20 symbols. The first letter of a name is capital and the other letters are lowercase.

Output

For each contestant mentioned in the input data output a line with their name and Isenbaev's number. If the number is undefined, output “undefined” instead of it. The contestants must be ordered lexicographically.

Sample

input output
7
Isenbaev Oparin Toropov
Ayzenshteyn Oparin Samsonov
Ayzenshteyn Chevdar Samsonov
Fominykh Isenbaev Oparin
Dublennykh Fominykh Ivankov
Burmistrov Dublennykh Kurpilyanskiy
Cormen Leiserson Rivest
Ayzenshteyn 2
Burmistrov 3
Chevdar 3
Cormen undefined
Dublennykh 2
Fominykh 1
Isenbaev 0
Ivankov 2
Kurpilyanskiy 3
Leiserson undefined
Oparin 1
Rivest undefined
Samsonov 2
Toropov 1

题意:给出n个3人小组,Isenbaev被编号为0。他的队友编号为1。他队友的队友被编号为2。。

。以此类推。假设没有办法通过关系联系到Isenbaev。则输出“undefined”。其它的输出编号。

解析:先将全部的人用map映射出一个编号,这里就利用了map能够自己主动按字典序排序的特点,把全部出现过的字符串直接放到map里。遍历的时候就是有字典序的了。然后就是以编号为顶点建无向图了,各组员之间的距离为1,这样用Dijkstra就能够了求解最短距离了。当然BFS也能够搜出最短路径长度。

AC代码:

#include <cstdio>
#include <string>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <map>
using namespace std;
#define INF 1e7
const int maxn = 302; int g[maxn][maxn], d[maxn];
string a[maxn][3];
map<string, int> m;
bool used[maxn]; void dijkstra(int s, int V){ //Dijkstra算法
fill(d, d + V, INF);
fill(used, used + V, false);
d[s] = 0; while(true){
int v = -1;
for(int u=0; u<V; u++){
if(!used[u] && (v == -1 || d[u] < d[v])) v = u;
} if(v == -1) break;
used[v] = true; for(int u=0; u<V; u++){
d[u] = min(d[u], d[v] + g[v][u]);
}
}
} int main(){
#ifdef sxk
freopen("in.txt", "r", stdin);
#endif //sxk int n;
while(scanf("%d", &n)==1){
for(int i=0; i<n; i++){
cin >> a[i][0] >> a[i][1] >> a[i][2];
m[ a[i][0] ] = 0; m[ a[i][1] ] = 0; m[ a[i][2] ] = 0; //把字符串放到map里
} int num = 0;
map<string, int>::iterator it;
for(it = m.begin(); it!=m.end(); it++){
it->second = ++num; //给个字符串编号
} for(int i=0; i<maxn; i++)
for(int j=0; j<maxn; j++) g[i][j] = INF;
for(int i=0; i<n; i++){ //初始化组员之间距离
int f1 = m.find(a[i][0])->second, f2 = m.find(a[i][1])->second, f3 = m.find(a[i][2])->second;
g[f1][f2] = g[f2][f3] = g[f1][f3] = 1;
g[f2][f1] = g[f3][f2] = g[f3][f1] = 1;
} int len = m.size();
it = m.find("Isenbaev");
if(it == m.end()){
for(it=m.begin(); it!=m.end(); it++) cout<<it->first<<" "<<"undefined"<<endl;
continue;
} dijkstra(it->second, len + 1); for(it=m.begin(); it!=m.end(); it++){
cout<<it->first<<" ";
if(d[it->second] == INF) puts("undefined");
else cout<<d[it->second]<<endl;
}
}
return 0;
}

URAL 1837. Isenbaev&#39;s Number (map + Dijkstra || BFS)的更多相关文章

  1. 2014牡丹江网络zoj3816Generalized Palindromic Number(dfs或者bfs)

    #include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> ...

  2. Find the duplicate Number (鸽巢原理) leetcode java

    问题描述: Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive ...

  3. c++的关联容器入门(map and set)

    目录 std::map std::set C++的关联容器主要是两大类map和set 我们知道谈到C++容器时,我们会说到 顺序容器(Sequence containers),关联容器(Associa ...

  4. number(4,2)

     number(4,2)  ##.## 例如:45.23 number(6,2)就是####.##   例如:9994.11   4代表总共有效位数为4位2代表小数位为2位

  5. &lt;LeetCode OJ&gt; 26 / 264 / 313 Ugly Number (I / II / III)

    Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers ...

  6. HDU2665Kth number (主席树+离散)

    Give you a sequence and ask you the kth big number of a inteval. InputThe first line is the number o ...

  7. 2019浙大校赛--J--Extended Twin Composite Number(毒瘤水题)

    毒瘤出题人,坑了我们好久,从基本的素数筛选,到埃氏筛法,到随机数快速素数判定,到费马小定理,好好的水题做成了数论题. 结果答案是 2*n=n+3*n,特判1,2. 以下为毒瘤题目: 题目大意: 输入一 ...

  8. 白话空间统计之:Moran&#39;s I(莫兰指数)

    前两天聊了空间统计学里面的两个经典概念,今天来说说第一篇文章留下的大坑:Moran's I. 首先,Moran's I这个东西.官方叫做:莫兰指数,是澳大利亚统计学家帕特里克·阿尔弗雷德·皮尔斯·莫兰 ...

  9. PTA 1004 Counting Leaves (30)(30 分)(dfs或者bfs)

    1004 Counting Leaves (30)(30 分) A family hierarchy is usually presented by a pedigree tree. Your job ...

随机推荐

  1. Coursera台大机器学习技法课程笔记09-Decision Tree

    这是我们已经学到的(除Decision Tree外) 下面是一个典型的decision tree算法,有四个地方需要我们选择: 接着介绍了一个CART算法:通过decision stump分成两类,衡 ...

  2. C++字符串完全指引

    引言 毫无疑问,我们都看到过像 TCHAR, std::string, BSTR 等各种各样的字符串类型,还有那些以 _tcs 开头的奇怪的宏.你也许正在盯着显示器发愁.本指引将总结引进各种字符类型的 ...

  3. jq选择子元素

    jq选择子元素 一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div"><a id="h ...

  4. 使用before_request来做权限和用户检查

    因为使用restful方式,因此每次用户访问都会上传带入auth_key,如jwt等,因此可在@app.before_request中做权限的检查. @app.app.before_request d ...

  5. 关于Ocelot 网关结合Consul实现服务转发的坑爹问题

    下面是我的网关配置来验证下Ocelot的问题,如果只是做网关转发应该还ok,但是要是结合Consul来检查并健康的转发有效服务器还是有很多弊端 关键在于通过设置 DeregisterCriticalS ...

  6. CSS3 transition实现超酷图片墙动画效果

    一.前面的感慨以前也陆陆续续试过CSS3的一些特性,文字投影,多边框等.但都是试试而已,知道有这么回事.今天,见到了一个新玩意,transition,认认真真的试了一下,经过,我懵了,我呆了,我傻了, ...

  7. Java第三阶段学习(八:网络通信协议、UDP与TCP协议)

    一.网络通信协议 1.概念: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传 ...

  8. 【LOJ】#6433. 「PKUSC2018」最大前缀和

    题解 神仙的状压啊QAQ 设一个\(f[S]\)表示数字的集合为\(S\)时\(sum[S]\)为前缀最大值的方案数 \(g[S]\)表示数字集合为\(S\)时所有前缀和都小于等于0的方案数 答案就是 ...

  9. Oracle的一些初步小东西

    经常要用数据库,让他自己启动的话,开机太慢,所以用命令启动方便点.  1.开启:    在运行中输入cmd,进入控制台,lsnrctl start回车,提示启动监听成功后net start Oracl ...

  10. [ 转载 ] Python Web 框架:Django、Flask 与 Tornado 的性能对比

    本文的数据涉及到我面试时遇到过的问题,大概一次 http 请求到收到响应需要多少时间.这个问题在实际工作中与框架有比较大的关系,因此特别就框架的性能做了一次分析. 这里使用 2016 年 6 月 9 ...