洛谷 P6145 【[USACO20FEB]Timeline G】
这道题难就难在建图吧,建图懂了之后,跑一遍最长路就好了(也就是关键路径,但是不会用拓补排序求qnq,wtcl)。
怎么建图呢?先不管输入的S,看下面的输入,直接建有向边即可,权值为x。如果现在跑最长路的话,没有一个出发点,那是不行的,所以我们可以想到建一个点,去连接一下入度为0的点,边权为多少呢?这就跟S挂钩了,推下样例,很容易发现边权即为输入的S。这个点的其实就叫超级源点,是一个很重要的思想,在这种题里面建超级源点很常见,当然,还有超级汇点,就是把所有出度为0的点连向一个点,这道题还用不上。现在,我们就可以写下最长路啦(因为是最长路所以不能用迪杰斯特拉算法!!!)。
交上去,好,只有80分。为什么呢?
连输入的S都没用完你想得满分?当我们建超级源点时,只向入度为0的点连了边,那么可不可以给其他点连呢?答案是可以的。设\(dis_i\)为超级源点到i的最长路,那么一定有可能\(dis_i\)小于一开始给出的S,这时肯定选择S啊,所以我们可以把超级源点向其他的点连一条S的边,这样就把所有情况考虑完了。
满分代码~
#include <bits/stdc++.h>
using namespace std;
int n , m , c , ans;
int dis[100010] , vis[100010];
vector<pair<int , int> > e[100010];
void spfa(int s){
	vis[s] = 1;	//最长路dis赋值为0
	queue<int> q;
	q.push(s);
	while(!q.empty()){
		int x = q.front();
		q.pop();
		vis[x] = 0;
		for(int i = 0; i < e[x].size(); i++){
			int nx = e[x][i].first , w = e[x][i].second;
			if(dis[nx] < dis[x] + w){	//注意是最长路哦!!!
				dis[nx] = dis[x] + w;
				if(!vis[nx]){
					vis[nx] = 1;
					q.push(nx);
				}
			}
		}
	}
}
int main(){
	cin >> n >> m >> c;
	for(int i = 1; i <= n; i++){
		int x;
		cin >> x;
		e[0].push_back(make_pair(i , x));	//建超级源点
	}
	for(int i = 1; i <= c; i++){
		int x , y , z;
		cin >> x >> y >> z;
		e[x].push_back(make_pair(y , z));
	}
	spfa(0);	//从超级源点开始跑,而不是1
	for(int i = 1; i <= n; i++) cout << dis[i] << endl;
	return 0;
}
双倍经验时间:
洛谷 P6145 【[USACO20FEB]Timeline G】的更多相关文章
- 【题解】洛谷P3119 Grass Cownoisseur G
		
题面:洛谷P3119 Grass Cownoisseur G 本人最近在熟悉Tarjan的题,刷了几道蓝题后,我飘了 趾高气扬地点开这道紫题,我一瞅: 哎呦!这不是分层图吗? 突然就更飘了~~~ 用时 ...
 - 洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金)  ————  1道骗人的二分+trie树(其实是差分算法)
		
题目 :Bovine Genomics G奶牛基因组 传送门: 洛谷P3667 题目描述 Farmer John owns NN cows with spots and NN cows without ...
 - BZOJ1563/洛谷P1912  诗人小G  【四边形不等式优化dp】
		
题目链接 洛谷P1912[原题,需输出方案] BZOJ1563[无SPJ,只需输出结果] 题解 四边形不等式 什么是四边形不等式? 一个定义域在整数上的函数\(val(i,j)\),满足对\(\for ...
 - 洛谷P3104 Counting Friends G 题解
		
题目 [USACO14MAR]Counting Friends G 题解 这道题我们可以将 \((n+1)\) 个边依次去掉,然后分别判断去掉后是否能满足.注意到一点, \(n\) 个奶牛的朋友之和必 ...
 - 题解 洛谷 P2287 [USACO07NOV]Sunscreen G
		
原题 传送门 有C个奶牛去晒太阳 (1 <=C <= 2500),每个奶牛各自能够忍受的阳光强度有一个最小值和一个最大值(minSPFi and maxSPFi),太大就晒伤了,太小奶牛没 ...
 - 洛谷 P6144 - [USACO20FEB]Help Yourself P(二项式定理+线段树)
		
题面传送门 题意: 给定 \(n\) 条线段,第 \(i\) 条线段左右端点分别为 \(l_i,r_i\) 定义一个线段集合的复杂度为其形成的连通块的个数的 \(k\) 次方. 求这 \(n\) 条线 ...
 - 洛谷P2865 [USACO06NOV]Roadblocks G(次短路)
		
一个次短路的问题,可以套用dijkstra求最短路的方法,用dis[0][i]表示最短路:dis[1][i]表示次短路,优先队列中存有最短路和次短路,然后每次找到一条道路对他进行判断,更新最短或次短路 ...
 - 不失一般性和快捷性地判定决策单调(洛谷P1912 [NOI2009]诗人小G)(动态规划,决策单调性,单调队列)
		
洛谷题目传送门 闲话 看完洛谷larryzhong巨佬的题解,蒟蒻一脸懵逼 如果哪年NOI(放心我这样的蒟蒻是去不了的)又来个决策单调性优化DP,那蒟蒻是不是会看都看不出来直接爆\(0\)?! 还是要 ...
 - 洛谷 P3659 [USACO17FEB]Why Did the Cow Cross the Road I G
		
//神题目(题目一开始就理解错了)... 题目描述 Why did the cow cross the road? Well, one reason is that Farmer John's far ...
 
随机推荐
- Java实现 LeetCode 705 设计哈希集合(使用数组保存有没有被用过)
			
705. 设计哈希集合 不使用任何内建的哈希表库设计一个哈希集合 具体地说,你的设计应该包含以下的功能 add(value):向哈希集合中插入一个值. contains(value) :返回哈希集合中 ...
 - Java实现 LeetCode 674 最长连续递增序列(暴力)
			
674. 最长连续递增序列 给定一个未经排序的整数数组,找到最长且连续的的递增序列. 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3. ...
 - Java实现 LeetCode 543 二叉树的直径
			
543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过根结点. 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 ...
 - 【Jquery】判断宽度跳转
			
$(window).resize(function(){ var wWidth = screen.width; if( wWidth < 788 ){ window.location.href= ...
 - Python API自动化测试实操
			
废话不多说,直接上代码截图: 我们首先来看看整个工程的目录结构,这样以便于了解项目的调用关系:config #这里是配置包 -- base_url.py 具体配置了被测系统的url and pat ...
 - MMDVM中继板测试软件MMDVMCal
			
运行方法: 只支持windows 64位系统 32位下载:https://share.weiyun.com/52uHAO5 64位下载:https://share.weiyun.com/5IgdqvL ...
 - XML基础(转)
			
一.XML是什么?作用是什么?1.XML是指可扩展标记语言(eXtensible Markup Language),用户自定义的标签.相对于HTML来讲的.2.XML被设计的宗旨是表示数据.HTML是 ...
 - iOS-自定义 UITabBarController
			
先来回顾一下UITabBarController ( 稍微详细的在在http://blog.csdn.net/yang198907/article/details/49807011) 伴随UITabB ...
 - .NET开发者省份分布排名
			
什么叫.NET开发者省份分布排名呢? 顾名思义,这几个词大家都认识,.NET开发者都集中在城市,涵盖一线城市到五线城市.排名的方法非常简单粗暴,就是根据本公众号(dotnet跨平台)的省份订阅读者数量 ...
 - Centos7 搭建KVM并创建Linux Windows虚拟机
			
一.安装KVM 查看系统版本 cat /etc/redhat-release 关闭防火墙及selinux systemctl disable firewalld.service 查看防 ...