站外题(可能)求助
  • 板块学术版
  • 楼主x1489631649
  • 当前回复39
  • 已保存回复39
  • 发布时间2024/6/3 20:45
  • 上次更新2024/6/3 22:47:15
查看原帖
站外题(可能)求助
780505
x1489631649楼主2024/6/3 20:45
题1  小天狼星的访问
【问题描述】
经过数月的准备,小天狼星,一个被诬陷的杀人犯,准备闯入霍格沃茨见见他的侄子。霍格沃茨的地图呈一颗树状分布。每个房间由若干跳过道通向其他房间。由于小天狼星想尽快找到哈利:
0.他会从房间0开始找
1.他总是会选择离自己最近的房间找
2.如果没找到,则继续选最近的房间深入
3.如果已没有房间可走,则返回到上一个房间,继续选择(往回走也算时间哦)。
4.当然,除了往回走,小天狼星是不会去一个房间两次的。-0- 
【输入格式】
第1行,n房间个数,p哈利所在的房间。(p<=n<100)
第2-n行,每行3个整数s,t,l。从房间s到房间t的时间l。(s≠t, 0<=s<t< n, 0 <l<=10000)
【输出格式】
输出找到哈利的时间(开始时间为0)。
【输入样例】
5 2
0 1 1
0 2 2
1 3 3
1 4 4
【输出样例】
     18

代码

#include <bits/stdc++.h>
using namespace std;
long long fa[100005],flag[100005],n,k,s;
struct node{
	int u,v,w;
}q[100005];
bool cmp(node x,node y)
{
	if(x.u!=y.u)
		return x.u<y.u;
	else return x.v<y.v; 
}
void way(int x)
{
	if(x==k)
	{
		cout<<s;
		exit(0);
	}
	for(int i=1;i<n;i++)
	{
		if(q[i].u==x)
		{
//			flag[i]=1;
			s+=q[i].w;
			way(q[i].v);
			s+=q[i].w;
		}
	}
}
int main()
{
	freopen("Sirius.in","r",stdin);
	freopen("Sirius.out","w",stdout);
	cin>>n>>k;
	for(int i=1;i<n;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		q[i].u=x;
		q[i].v=y;
		q[i].w=z;
	}
	sort(q+1,q+n,cmp);
	way(0);
	return 0;
}

40分!!!

2024/6/3 20:45
加载中...