【t087】公共汽车
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
路人丁成为了一名新公交车司机,每个司机都有一张牌子,牌子的正面写了拥有这个牌子的司机开的线路号,另外一面随便写了一
个号码。但是路人丁的牌子两面写的都不是自己开的线路号。所以他决定跟其他人换,当然,所有的司机都只有当路人丁手里
的牌子上的某面写了自己的线路号时才愿意跟他换。所以路人丁想知道自己至少要换几次牌子才能换到一张写有自己线路号的
牌子。
【输入格式】
第一行包括一个整数K(K≤1000),表示车的数量(新车除外)。这些车的编号依次从1到K。接下来的K行,每行包括此车对应的线路号和牌子另一面的号码(长整范围的数字)。 最后一行是安排路人丁开的公交车线路号以及给他的牌子上的号码。
【输出格式】
首行是最少交换的次数M,接下来的M行顺序输出要交换牌子的车的编号。如果没有方案,则输出 IMPOSSIBLE。
Sample Input
4
8 5
5 4
7 4
1 5
4 1 8
Sample Output
2
4
2
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t087
【题意】
【题解】
牌子的另外一面对应的交通线;
看看是哪个公交的交通线;
然后用一条边由前者指向后者;
表示可以从前者换到后者;
肯定没有必要连成一个环啦;
想象一下就是一个牌子一直和另外一个牌子换。
跑个最短路写个路径输出就好
(建图的话一定要按照代码的方式建图)
不然方案和答案会不一样。
(可能会不一样)
(算是贪心吧?
【完整代码】
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%lld",&x)
typedef pair<int, int> pii;
typedef pair<LL, LL> pll;
const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1 };
const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1 };
const double pi = acos(-1.0);
const int N = 1100;
int n,a1,a2;
int idx[N],ano[N];
int dis[N],pre[N],dl[N],h,t;
int zh[N];
vector <int> G[N];
void output_ans(int now)
{
if (pre[now] == 0)
return;
output_ans(pre[now]);
printf("%d\n", dl[now]);
}
int main()
{
//freopen("F:\\rush.txt", "r", stdin);
rei(n);
rep1(i, 1, n)
rei(idx[i]), rei(ano[i]);
rei(idx[n + 1]), rei(a1), rei(a2);
if (a1 == idx[n + 1] || a2 == idx[n + 1])
{
puts("0");
return 0;
}
rep1(i, 1, n)
{
rep1(j, 1, n)
{
if (ano[i] == idx[j])
G[i].push_back(j);
}
if (a1 == idx[i] || a2==idx[i])
G[n + 1].push_back(i);
}
memset(dis, 255, sizeof dis);
dis[n + 1] = 0;
h = 1, t = 1;
dl[1] = n + 1;
while (h <= t)
{
int x = dl[h++];
int len = G[x].size();
rep1(i, 0, len - 1)
{
int y = G[x][i];
if (dis[y] == -1)
{
dis[y] = dis[x] + 1;
dl[++t] = y;
pre[t] = h - 1;
if (ano[y] == idx[n + 1])
{
printf("%d\n", dis[y]);
output_ans(t);
return 0;
}
}
}
}
puts("IMPOSSIBLE");
return 0;
}
【t087】公共汽车的更多相关文章
- BW知识问答汇总
什么是sap的星型结构,能不能详细讲解一下? Cube的星型结构中SID技术的优点有哪些? 什么是BW的星型结构,与传统的星型结构的区别是什么? SAP的星型结构相对于传统的星型结构优势? Cube与 ...
- 设计模式--桥接模式Bridge(结构型)
一.概述 在软件系统中,某些类型由于自身的逻辑,它具有两个或者多个维度的变化,如何应对这种"多维度的变化",就可以利用桥接模式. 引例: 设想如果要绘制矩形.圆形.椭圆.正方形,我 ...
- php实现设计模式之 桥接模式
<?php /** 桥接模式:将抽象部分与实现部分分离,使它们都可以独立的变化. * * 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,桥接模式就是应对这种多维度的变化 */ ...
- python设计模式
本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复 ...
- Google Maps API V3 之 路线服务
Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...
- [Head First设计模式]生活中学设计模式——迭代器模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- 瘋子C++笔记
瘋耔C++笔记 欢迎关注瘋耔新浪微博:http://weibo.com/cpjphone 参考:C++程序设计(谭浩强) 参考:http://c.biancheng.net/cpp/biancheng ...
- Mifare系列3-卡的能源和数据传递(转)
文/闫鑫原创转载请注明出处http://blog.csdn.net/yxstars/article/details/38080175 在MIFARE卡中,能量和数据通过天线传输,卡中天线为几匝线圈,直 ...
- BW知识问答锦集
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
随机推荐
- 51Nod——N1082 与7无关的数
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1082 题目来源: 有道难题 基准时间限制:1 秒 空间限制:13107 ...
- 8.Swift教程翻译系列——控制流之条件
3.条件语句 常常会须要依据不同的情况来运行不同的代码. 你可能想要在错误发生的时候运行一段额外的代码,或者当某个值变得太高或者太低的时候给他输出出来.要实现这些需求,你能够使用条件分支. Swift ...
- (转)oracle表空间使用率统计查询
转自:http://www.cnblogs.com/xwdreamer/p/3511047.html 参考文献 文献1:http://blog.itpub.net/24104518/viewspace ...
- FTP、WEB虚拟目录作用
随风原文FTP.WEB虚拟目录作用 在 IIS中,双击您要为之添加虚拟目录的服务以显示其属性表. 单击“目录”选项卡. 单击“添加”. 单击“浏览”从“目录”框中选择一个目录. ...
- 希捷硬盘扩容软件-----DiscWizard
SeagateDiscWizard可为Seagate磁盘驱动器的使用提供便利.DiscWizard可帮助您迅速安装新的磁盘驱动器.并通过安装向导指导您在磁盘驱动器上完毕分区的创建和格式化. DiscW ...
- 安装后,挂载c盘失败
现象: 安装后,window C盘mount失败 错误内容如下: Error mounting: mount exited with exit code 13: ntfs_attr_pread_i: ...
- php实现 计算字符串的距离
php实现 计算字符串的距离 一.总结 一句话总结:解决dp问题最好的方法是什么:分析出状态后 实例+画表. 1.解决dp问题最好的方法是什么? 分析出状态后 实例+画表 2.画图的好处? 画出来表之 ...
- 5DXTPlayer串口调试小结
小结 过程总是艰难. 首先是没有准备好. 没有安装vs2012,安装的时候,出现各种状况,因为先安装的2013高版本,造成12安装不正确,程序编译出问题.没有办法,只好卸载vs2012,2013及其各 ...
- Activex调试以及m_hWnd为空 解决办法
1. 点击[开始]->[运行] 命令:regedit.2. 定位到HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet ...
- angular管道相关知识
原文地址 https://www.jianshu.com/p/22e0f95bcf24 什么是管道 每个应用开始的时候差不多都是一些简单任务:获取数据.转换它们,然后把它们显示给用户. 获取数据可能简 ...