首页 > 其他分享 >[HNOI2005] 狡猾的商人's 题解

[HNOI2005] 狡猾的商人's 题解

时间:2024-07-12 13:30:04浏览次数:8  
标签:ch int 题解 top vis le HNOI2005 狡猾 dis

题目描述

给你一个\(n\)元一次方程,判断是否有解,方程给出的格式为 \(a-b=c\)

思路

这道题看上去是一道题目看上去就是判断给出条件是否有矛盾,所以就自然而然的可以使用带权并查集
但是因为我太懒了并且这道题目要求使用差分约束系统进行求解,于是就需要将题目转化一下

因为差分约束系统只能处理不等量关系,所以就需要使用一个不等式组进行表示,并且这个不等式组只能有一个解
于是就可以将 \(a-b=c\) 转化为\(\begin{cases}a-b\le c \\a-b \ge c\end{cases}\)
但是在差分约束系统只能处理 \(\le\) 的情况,所以不等式组就转化成了\(\begin{cases}a-b\le c \\b-a \le -c\end{cases}\),
于是在输入之后就可以这样储存了:

v[a-1].push_back({b,c}),v[b].push_back({a-1,-c});

注意: \(a\) 应该\(-1\),否则就将 \(a\) 这个月漏算了

AC Code

#include<bits/stdc++.h>
inline int read(){ //没有大用的快读
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')
			f=-1;
		ch=getchar();
	}while(ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+(ch^48);
		ch=getchar();
	}return x*f;
}int T,n,m,cnt[1001],dis[1001];
bool vis[1001];
struct node{
	int k; //到达的点
	int num; //代价
};
std::vector<node> v[1001]; //因为本人太懒,所以使用vector储存||v[i]表示从i出发的节点
inline bool spfa(int s){
	std::queue<int> q;
	memset(dis,0x3f,sizeof(dis)); //多测不清空,爆零见祖宗
	memset(vis,0,sizeof(vis));
	memset(cnt,0,sizeof(cnt));
	dis[s]=0; //初始化
	vis[s]=1;
	q.push(s);
	while(!q.empty()){
		int top=q.front();
		q.pop();
		vis[top]=0;
		for(node i:v[top]){
			if(dis[i.k]>dis[top]+i.num){ //差分约束系统跑的是最长路
				dis[i.k]=dis[top]+i.num;
				if(!vis[i.k]){
					q.push(i.k);
					vis[i.k]=1;
					cnt[i.k]++;
					if(cnt[i.k]>n) //有负权环
						return 0;
				}
			}
		}
	}return 1;
}int main(){
	T=read();
	while(T--){
		n=read(),m=read();
		for(int i=1,a,b,c;i<=m;++i){
			a=read(),b=read(),c=read();
			v[a-1].push_back({b,c}); //储存不等式
			v[b].push_back({a-1,-c});
		}bool flag=1;
		for(int i=0;i<=n;++i){
			if(spfa(i)==0){
				flag=0;
				break;
			}
		}if(flag==1)
			puts("true");
		else
			puts("false");
		for(int i=0;i<=m;i++) //多测不彻底清空=10pts
			v[i].erase(v[i].begin(),v[i].end());
	}return 0;
}

标签:ch,int,题解,top,vis,le,HNOI2005,狡猾,dis
From: https://www.cnblogs.com/liudagou/p/18298197

相关文章

  • Ubuntu系统下相关问题解决方案(亲测)
    系统:ubuntu20.04记录使用ubuntu系统过程中遇到的一些问题以及亲测有效的解决方案后续遇到其他问题,会将相关内容持续更新对应原文:Ubuntu系统下相关问题解决方案(亲测)-知乎(zhihu.com)目录一、速度问题1.1gitcloneGithub上的项目时速度慢1.2ubuntu下设置pip加速1.......
  • [CF1656G] Cycle Palindrome 的题解
    题目大意给定一个长度为\(n\)的数列\(a\),要求求出一个排列\(p\)满足\(a_{p_1},a_{p_2},\cdots,a_{p_n}\)是一个回文字符串而且把\(i\)向\(p_i\)连边得到的图中只有一个环。数据范围满足,\(1\le\sumn\le2\times10^5\)。思路先不考虑\(p\)是否构成满足要求的环......
  • [CF1646F] Playing Around the Table 的题解
    题目大意有\(n\)种牌,一种\(n\)张,一共\(n\)个玩家,一人\(n\)个。每个人一次将一张牌对给下家,求构造方案使可以在\(n\cdot(n-1)\)次操作之内使第\(i\)个人拥有\(n\)张\(i\)。数据范围满足,\(1\len\le100\)。思路因为直接构造出题目要求的情况会出现如果一个人提......
  • 2022 RoboCom CAIP(本科组)国赛个人题解
    RC-u1智能红绿灯为了最大化通行效率同时照顾老年人穿行马路,在某养老社区前,某科技公司设置了一个智能红绿灯。这个红绿灯是这样设计的:路的两旁设置了一个按钮,老年人希望通行马路时会按下按钮;在没有人按按钮的时候,红绿灯一直为绿灯;当红绿灯为绿灯时,有人按下按钮,第一次按下......
  • CF1992场题解
    OnlyPluses算法:数学。题意简述:有三个数,每次选择一个数\(x\),使得\(x\)增加一,至多操作\(5\)次,最后求出这三个数的乘积最大值。简单题,一眼秒了。考虑把这\(3\)个数从小到大排序,显然加最小的数比加其他的数更优。简单证一下:设排序后的三个数为\(a,b,c\),有\(b\timesc\ge......
  • upload-labs靶场全题解
    ​​靶场搭建对php和apache版本有严格要求,建议使用phpstudy2018并且使用设置php版本为5.2.17,这个靶场比较老了,如果要复现的话,必要严格按照要求来使用,博主使用最新版的phpstudy在某些靶场上未能成功复现,所以浪费了很多时间。。。。。Upload-Labs环境要求操作系统:wind......
  • 2024SCAU暑假集训_1题解(部分,待补充)
    最近我们开始了暑假集训现在我来补一下第一场集训的题解题目题号来源是否写了题解A黑暗爆炸4771否但是放了大佬的链接指路B黑暗爆炸3399已写C洛谷P3231D洛谷P2120ECodeForces197AF洛谷P1732GBZOJ5296H黑暗爆炸1406......
  • 多线程中自定义线程池与shiro导致的权限错乱问题解决
    importorg.apache.shiro.SecurityUtils;importorg.apache.shiro.subject.Subject;importorg.apache.shiro.util.ThreadContext;importjava.util.concurrent.*;publicclassShiroAwareThreadPoolExecutorextendsThreadPoolExecutor{publicShiroAwareThread......
  • Linux创建组和用户groupadd:无法锁定/etc/group问题解决
    问题原因:相关关键文件进行了锁定,不能被访问和修改1.确认是否是使用root用户执行,2.确定文件权限没问题使用lsattr命令查看隐藏权限设定情况[abc@localhost~]$lsattr/etc/group----------------/etc/group[abc@localhost~]$lsattr/etc/passwd----------------/etc/......
  • Codeforces Round #956 (Div. 2)题解
    A.ArrayDivisibility需要让满足$k\midj$的所有\(a_j\)的和整除k,只需要让每个\(a_j\)整除k就可以了,可以让\(a_j=j\)#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'typedefpair<int,int>pii;typedefunsignedlonglo......