ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷 P1993 【小K的农场】

2020-07-02 21:05:00  阅读:280  来源: 互联网

标签:洛谷 int 农场 ge tot cin add P1993 dis


这道题都没有用Ford的啊,跑的比SPFA还快,不加优化就可以过...


看到这一组组的不等式,就可以想到差分约束了,但是这道题需要进行转化,我这里跑的是最短路(好多大佬都跑的最长路qwq)。


  • \(b\ge a-c\)
  • \(a\ge b+c\)
  • 这个变化就得看好了\(a\ge b\) && \(b\ge a\)

这些了解了之后,直接看代码就可啦~

#include <bits/stdc++.h>
using namespace std;
struct node{
	int l , r , w;
};
node e[50010];
int n , m , tot;
long long ans;
int dis[10010];
void add(int x , int y , int z){
	e[++tot].l = x;
	e[tot].r = y;
	e[tot].w = z;
}
int main(){
	cin >> n >> m;
	for(int i = 1; i <= m; i++){
		int f , x , y , z;
		cin >> f >> x >> y;
		if(f == 1){
			cin >> z;
			add(x , y , -z);
		}
		if(f == 2){
			cin >> z;
			add(y , x , z);
		}
		if(f == 3){
			add(x , y , 0);
			add(y , x , 0);
		}
	}
	memset(dis , 127 , sizeof(dis));
	dis[1] = 0;
	for(int i = 1; i < n; i++)
		for(int j = 1; j <= tot; j++)
			dis[e[j].r] = min(dis[e[j].r] , dis[e[j].l] + e[j].w);
	for(int j = 1; j <= tot; j++)
		if(dis[e[j].r] > dis[e[j].l] + e[j].w){
			cout << "No";
			return 0;
		}
	cout << "Yes";
	return 0;
}

标签:洛谷,int,农场,ge,tot,cin,add,P1993,dis
来源: https://www.cnblogs.com/bzzs/p/13227062.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有