团体程序设计天梯赛-练习集 - L3-014 周游世界(30 分)

简介: 团体程序设计天梯赛-练习集 - L3-014 周游世界(30 分)

题目链接:点击打开链接

题目大意:略。

解题思路:点击打开链接

AC 代码

#include<bits/stdc++.h>#include<cmath>#define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007usingnamespacestd;
typedeflonglongll;
constintmaxn=1e4+10;
intd, id;
intminCnt, minTran;
intvis[maxn];
unordered_map<int,int>line;
vector<int>tpath, path, v[maxn];
intfhash(intid1,intid2)
{
returnid1*10000+id2;
}
intcalTran()
{
intpreline=0, cnt=-1;
for(inti=1;i<tpath.size();i++)
    {
id=fhash(tpath[i-1],tpath[i]);
if(line[id]!=preline) cnt++, preline=line[id];
    }
returncnt;
}
voiddfs(ints, intcnt)
{
if(s==d&& (cnt<minCnt||cnt==minCnt&&calTran()<minTran))
    {
path=tpath;
minCnt=cnt;
minTran=calTran();
    }
if(s==d) return;
for(inti=0;i<v[s].size();i++)
    {
inttid=v[s][i]; // 去掉 int dfs最终答案会出问题,因为当 tid 作为全局变量时,一直在变,而局部变量对dfs的一个很大的作用就是每次回溯时,该变量的值可以恢复到起初的值if(!vis[tid])
        {
vis[tid]=1;
tpath.push_back(tid);
dfs(tid, cnt+1);
vis[tid]=0;
tpath.pop_back();
        }
    }
}
intmain()
{
intn,m,pre,q,s;
scanf("%d",&n);
for(inti=1;i<=n;i++)
    {
scanf("%d%d",&m,&pre);
for(intj=1;j<m;j++)
        {
scanf("%d",&id);
v[pre].push_back(id);
v[id].push_back(pre);
line[fhash(pre,id)]=line[fhash(id,pre)]=i;
pre=id;
        }
    }
scanf("%d",&q);
while(q--)
    {
scanf("%d%d",&s,&d);
//        if(!book[s] || !book[d]){puts("Sorry, no line is available."); continue;}mem(vis,0), tpath.clear(), minCnt=minTran=INF;
vis[s]=1;
tpath.push_back(s);
dfs(s,0);
tpath.pop_back();
vis[s]=0;
if(minCnt==INF){puts("Sorry, no line is available."); continue;} // 存在线路与线路之间断开的printf("%d\n",minCnt);
intpreline=0, len=path.size(), preTran;
for(inti=1;i<len;i++)
        {
id=fhash(path[i-1],path[i]);
if(line[id]!=preline)
            {
if(preline!=0) printf("Go by the line of company #%d from %04d to %04d.\n",preline,preTran,path[i-1]);
preline=line[id];
preTran=path[i-1];
            }
        }
printf("Go by the line of company #%d from %04d to %04d.\n",preline,preTran,path[len-1]);
    }
return0;
}
目录
相关文章
|
8月前
团体程序设计天梯赛-练习集L2篇⑨
团体程序设计天梯赛-练习集L2篇⑨
102 0
|
8月前
团体程序设计天梯赛-练习集L2篇⑦
团体程序设计天梯赛-练习集L2篇⑦
40 0
|
8月前
|
Perl
团体程序设计天梯赛-练习集L1篇③
团体程序设计天梯赛-练习集L1篇③
99 0
|
8月前
|
测试技术
团体程序设计天梯赛-练习集L2篇⑥
团体程序设计天梯赛-练习集L2篇⑥
59 0
|
10月前
|
芯片
2022年 团体程序设计天梯赛——题解集(1)
⭐L1一阶题 (虽然比较基础但是是很重要的一部分,且一些题目有一定难度哦!) ⭐L1-081 今天我要赢 (5分)——水题 本题题目链接!!!!! 2018 年我们曾经出过一题,是输出“2018 我们要赢”。今年是 2022 年,你要输出的句子变成了“我要赢!就在今天!”然后以比赛当天的日期落款。
290 0
|
10月前
|
前端开发 JavaScript 开发者
2016年 团体程序设计天梯赛——题解集
⭐ L1-028 判断素数 (10分) 本题题目链接 本题的目标很简单,就是判断一个给定的正整数是否素数。 输入格式: 输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于2 31 的需要判断的正整数。 输出格式: 对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。
195 0
|
10月前
|
Linux 测试技术 容器
2020年 团体程序设计天梯赛——题解集(1)
⭐L1一阶题 (虽然比较基础但是是很重要的一部分,且一些题目有一定难度哦!) ⭐L1-065 嫑废话上代码 (5分) 本题题目链接!!!!! Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没有输入。
160 0
|
10月前
|
机器学习/深度学习
2018年 团体程序设计天梯赛——题解集
⭐L1-051 打折 (5分) 本题题目链接👈👈👈👈👈 去商场淘打折商品时,计算打折以后的价钱是件颇费脑子的事情。例如原价 ¥988,标明打 7 折,则折扣价应该是 ¥988 x 70% = ¥691.60。本题就请你写个程序替客户计算折扣价。 输入格式: 输入在一行中给出商品的原价(不超过1万元的正整数)和折扣(为[1, 9]区间内的整数),其间以空格分隔。 输出格式: 在一行中输出商品的折扣价,保留小数点后 2 位。
453 0
|
10月前
|
程序员
2017年 团体程序设计天梯赛——题解集
⭐L1-038 新世界 (5分) 本题题目链接👈 👈 👈 👈 👈 这道超级简单的题目没有任何输入。 你只需要在第一行中输出程序员钦定名言“Hello World”,并且在第二行中输出更新版的“Hello New World”就可以了。
251 0
|
10月前
|
人工智能 算法 安全
2022年 团体程序设计天梯赛——题解集(2)
⭐L1一阶题 (虽然比较基础但是是很重要的一部分,且一些题目有一定难度哦!) ⭐L1-081 今天我要赢 (5分)——水题 本题题目链接!!!!! 2018 年我们曾经出过一题,是输出“2018 我们要赢”。今年是 2022 年,你要输出的句子变成了“我要赢!就在今天!”然后以比赛当天的日期落款。
226 0