[CodeForce721C]Journey

2023-10-18 02:30
文章标签 journey codeforce721c

本文主要是介绍[CodeForce721C]Journey,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

Recently Irina arrived to one of the most famous cities of Berland — the Berlatov city. There are n showplaces in the city, numbered from 1 to n , and some of them are connected by one-directional roads. The roads in Berlatov are designed in a way such that there are no cyclic routes between showplaces.

最近,伊琳娜来到了柏林最著名的城市之一——柏林托夫市。这个城市有n个展厅,编号从1到N,其中一些是通过单向道路连接的。在贝拉托夫的道路设计的方式,使没有循环路线之间的展示。

Initially Irina stands at the showplace 1, and the endpoint of her journey is the showplace n. Naturally, Irina wants to visit as much showplaces as she can during her journey. However, Irina's stay in Berlatov is limited and she can't be there for more than T time units.

伊琳娜起初站在1号展览馆,她的旅程的终点是N号展览馆。自然,伊琳娜希望在旅途中尽可能多地参观展览馆。然而,伊琳娜在贝拉托夫的停留是有限的,她不能在那里超过t个时间单位。

Help Irina determine how many showplaces she may visit during her journey from showplace 1 to showplace n within a time not exceeding T. It is guaranteed that there is at least one route from showplace 1 to showplace n such that Irina will spend no more than T time units passing it.

帮助伊琳娜在不超过t的时间内确定从1号展厅到N号展厅的旅程中可以参观多少个展厅。保证至少有一条从1号展厅到N号展厅的路线,这样伊琳娜将花费不超过t个时间单位通过。

输入格式

The first line of the input contains three integers n, m and T (2 ≤ n ≤ 5000,  1 ≤ m ≤ 5000,  1 ≤ T ≤ 109) — the number of showplaces, the number of roads between them and the time of Irina's stay in Berlatov respectively.

输入的第一行包含三个整数n、m和t(2≤n≤5000、1≤m≤5000、1≤t≤109)-展示场所的数量、它们之间的道路数量以及Irina在Berlatov的停留时间。

The next m lines describes roads in Berlatov. i-th of them contains 3 integers ui, vi, ti (1 ≤ ui, vi ≤ n, ui ≠ vi, 1 ≤ ti ≤ 109), meaning that there is a road starting from showplace ui and leading to showplace vi, and Irina spends ti time units to pass it. It is guaranteed that the roads do not form cyclic routes.

下一条M线描述了贝拉托夫的道路。其中i-th包含3个整数ui,vi,ti(1≤ui,vi≤n,ui≠vi,1≤109),这意味着有一条从ShowPlace ui开始通向ShowPlace vi的路,而Irina花费ti时间单位通过它。保证道路不形成循环路线。

It is guaranteed, that there is at most one road between each pair of showplaces.
保证每对展厅之间最多有一条路。

输出格式

Print the single integer k (2 ≤ k ≤ n) — the maximum number of showplaces that Irina can visit during her journey from showplace 1 to showplace n within time not exceeding T, in the first line.
输出单个整数k(2≤k≤n)-在第一行时间内,从1号展厅到N号展厅,Irina可以参观的最大展厅数量。

Print k distinct integers in the second line — indices of showplaces that Irina will visit on her route, in the order of encountering them.
在第二行中输出k个不同的整数——按照遇到的顺序,显示伊琳娜将要去的地方的索引。

If there are multiple answers, print any of them.
如果有多个答案,请输出其中任何一个。

样例输入

4 3 13
1 2 5
2 3 7
2 4 8

样例输出

3
1 2 4

题解

网上的方法大都是使用动态规划来做,事实上这个题可以不用dp。如图
1240
我们设f[i]表示到达第i个点时最多可以经过的点数,再设cnt[i]表示点i在当前状态下的入度大小,再以入度的大小从小到大遍历每一个点以更新它能走过的最大点数。因为每次更新之后最近的点的入度一定是1,因此我们一定可以在之前就得到到达该点的最优情况。

    queue<int> q;q.push(1);while(!q.empty()){u=q.front();q.pop();for(register int i=p[u];~i;i=E[i].next){v=E[i].v;cnt[v]--;if(cnt[v]==1)q.push(v);if(dis[u]+w<=T){if(dis[v]>dis[u]+w)dis[v]=dis[u]+w;}}} 

当然,这样会产生一个问题:如果之前得到的最大点数不是最优的,我们就无法更新出更优的情况。因此,我们再用一个二维数组[box]来记录当前可能的较优情况。当然,不可能将所有出现过的情况全部记录下来。事实上,对于每个点都有固定的初始状态数量。我们在更新任意一个初始状态时,就用更新之后的状态代替初始状态。

if(dis[u][i]+w<=T){dis[v][i]=dis[u][i]+w;
}

代码如下

#include<bits/stdc++.h>
#define maxn 10000
#define maxm 10000
using namespace std;
inline char get(){static char buf[3000],*p1=buf,*p2=buf;return p1==p2 && (p2=(p1=buf)+fread(buf,1,3000,stdin),p1==p2)?EOF:*p1++;
}
inline int read(){register char c=get();register int f=1,_=0;while(c>'9' || c<'0')f=(c=='-')?-1:1,c=get();while(c<='9' && c>='0')_=(_<<3)+(_<<1)+(c^48),c=get();return _*f;
}
struct edge{int u,v,w,next;
}E[maxm];
int p[maxn],eid;
inline void init(){for(register int i=1;i<maxn;i++)p[i]=-1;eid=0;
}
inline void insert(int u,int v,int w){E[eid].u=u;E[eid].v=v;E[eid].w=w;E[eid].next=p[u];p[u]=eid++;
}
int n,m,k;
int dis[maxn][100];
int main(){init();n=read();m=read();k=read();for(register int i=1;i<=n;i++){int u=read(),v=read(),w=read();insert(u,v,w);}for(register int i=1;i<maxn;i++){for(register int j=1;j<100;j++)dis[i][j]=0x3f3f3f3f;}queue<int> q;q.push(1);while(!q.empty()){u=q.front();q.pop();for(register int i=p[u];~i;i=E[i].next){v=E[i].v;cnt[v]--;if(cnt[v]==1)q.push(v);if(dis[u][i]+w<=T){dis[v][i]=dis[u][i]+w;}}}cout<<dis[n]; return 0;
}

转载于:https://www.cnblogs.com/Chen574118090/p/10199834.html

这篇关于[CodeForce721C]Journey的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/229600

相关文章

地平线—征程2(Journey 2-J2)芯片详解(21)—UART+SPI

写在前面 本系列文章主要讲解地平线征程2(Journey 2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey 2-J2)芯片。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 错过其他章节的同学可以电梯直达目录↓↓↓ 地平线—征程2(Journey 2-J2)芯片详解——目录-CSDN博客 8. PERI子系统 8.1 UART 8.1.1

地平线—征程2(Journey 2-J2)芯片详解(20)—BPU系统

写在前面 本系列文章主要讲解地平线征程2(Journey 2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey 2-J2)芯片。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 错过其他章节的同学可以电梯直达目录↓↓↓ 地平线—征程2(Journey 2-J2)芯片详解——目录-CSDN博客 7. BPU子系统 7.1.1 介绍 J2的双核

地平线—征程2(Journey 2-J2)芯片详解(19)—PYM+IAR

写在前面 本系列文章主要讲解地平线征程2(Journey 2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey 2-J2)芯片。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 错过其他章节的同学可以电梯直达目录↓↓↓ 地平线—征程2(Journey 2-J2)芯片详解——目录-CSDN博客 6. VIO子系统 6.5 PYM 6.5.1 介绍

地平线—征程2(Journey 2-J2)芯片详解(18)—ISP+IPU

写在前面 本系列文章主要讲解地平线征程2(Journey 2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey 2-J2)芯片。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 错过其他章节的同学可以电梯直达目录↓↓↓ 地平线—征程2(Journey 2-J2)芯片详解——目录-CSDN博客 6. VIO子系统 6.3 ISP 6.3.1 介绍

地平线—征程2(Journey 2-J2)芯片详解(16)—DDR系统

写在前面 本系列文章主要讲解地平线征程2(Journey 2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey 2-J2)芯片。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 错过其他章节的同学可以电梯直达目录↓↓↓ 地平线—征程2(Journey 2-J2)芯片详解——目录-CSDN博客 5. DDR子系统 DDR内存子系统包括DDR控制器、

地平线—征程2(Journey 2-J2)芯片详解(13)—QSPI+BIFSPI+BIFSD

写在前面 本系列文章主要讲解地平线征程2(Journey 2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey 2-J2)芯片。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 错过其他章节的同学可以电梯直达目录↓↓↓ 地平线—征程2(Journey 2-J2)芯片详解——目录-CSDN博客 4. CPU子系统 4.6 QSPI 4.6.1 介

地平线—征程2(Journey 2-J2)芯片详解(11)—CPU+CoreSight

写在前面 本系列文章主要讲解地平线征程2(Journey 2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey 2-J2)芯片。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 错过其他章节的同学可以电梯直达目录↓↓↓ 地平线—征程2(Journey 2-J2)芯片详解——目录-CSDN博客 4. CPU子系统 4.1 双核A53 CPU 4.

为什么Mid journey很容易就能做出很有氛围感的图而SD却容易做图很丑?

前言 6月12日,Midjourney更新了一项新的功能——模型个性化,这一项功能最重要的作用就是能够让生成的图像更加符合你自己的审美标准。就像每个艺术家都有自己的独特风格一样,有了这项模型个性化功能的加持,每个人都能生成具有鲜明的个人风格的AI绘画作品!! 模型个性化的原理 不知道大家有没有一个感觉,每次你写提示时,都会有很多东西出现在了你的想象和审美认知中,但却“未说出口”。模型个性化就

Mid-journey Prompts -core

以“-core”结尾的描述符。这些提示往往会产生强烈的影响,因为它们涵盖了整个风格、动作和美学。 提示词:Dreamcore [主题] Dreamcore 通过尝试使用鲜艳的色彩、奇怪的形状和不合时宜的物体来捕捉做梦的感觉,从而探索超现实。Midjourney 还喜欢在使用这个术语时添加发光的光源。 提示词:Cluttercore[主题] 感觉像新式一些的极繁风格,无论大小格

Light OJ 1348 - Aladdin and the Return Journey(树链剖分)

题目链接:Light OJ 1348 - Aladdin and the Return Journey 题目大意:给定一棵树,两种操作 0 i j:ij路径上的权值和1 i v:将第i个节点的权值修改为v 解题思路:树链剖分的裸题。 #include <cstdio>#include <cstring>#include <algorithm>using namespace std