luogu 2294 狡猾的商人 带权并查集
此题做法多啊
带权并查集,区间dp,前缀和,差分约束
1.自己写的前缀和, 11
#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
using namespace std;
const int N=;
inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;}
int T,n,m,l,r,v,sum,s[N];
int main(){
T=read();
while(T--){
int fg=;
n=read();m=read();
rep(i,,m){
l=read();r=read();v=read();
sum=s[r]-s[l-];
if(sum==) s[r]=s[l-]+v;
else if(sum&&sum!=v){printf("false\n");fg=;break;}}
if(fg) printf("true\n");
}return ;
}
2.自己写的区间dp
#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
using namespace std; inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;}
const int N=;
int T,n,m,x,y,z,p,f[N][N];
int main(){
T=read();
while(T--){
n=read();m=read();
rep(i,,m){
x=read();y=read();z=read();
f[x][y]=z;}
p=;
for(int i=;i<n;i++)if(p)
for(int j=i+;j<=n;j++)if(p)
for(int k=i;k<j;k++)if(p)
if(f[i][k]&&f[k+][j])
if(f[i][j]&&f[i][j]!=f[i][k]+f[k+][j]){
p=;break;}
else f[i][j]=f[i][k]+f[k][j];
if(p==) printf("false\n");
else printf("true\n");
}return ;
}
3.区间dp 100
注意枚举时的方向,此题第二层为逆序(没有明白啊啊啊)
#include<bits/stdc++.h>
using namespace std; inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;}
const int N=;
int f[N][N],w,n,m,p,s,t,v;
int main(){
w=read();
while(w--){
memset(f,,sizeof(f));
n=read(),m=read();
for(int i=;i<=m;i++){
s=read(),t=read(),v=read();
f[s][t]=v;}
p=;
for(int i=;i<=n;i++)if(p)
for(int j=i-;j>=;j--)if(p)
for(int k=j;k<i;k++)
if(f[j][k]&&f[k+][i]){
if(f[j][i]&&f[j][i]!=f[j][k]+f[k+][i])
{p=;break;}
else f[j][i]=f[j][k]+f[k+][i];}
if(p==) printf("false\n");
else printf("true\n");
}
return ;
}
4.带权并查集
Attention!!!!!
f,ff提前取出来,不明原因,惨痛的教训。。。问提交满了一整页是怎样的感受
#include<bits/stdc++.h>
#define rep(i,x,y) for(register int i=x;i<=y;i++)
#define dec(i,x,y) for(register int i=x;i>=y;i--)
#define int long long
using namespace std;
const int N=;
inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;}
int T,n,m,x,y,z,fg,xx,yy,fa[N],cha[N];
int find(int x){
if(fa[x]==x) return x;
int f=fa[x],ff=find(fa[x]);cha[x]+=cha[f];
//先推直接父亲权值,再路径压缩
fa[x]=ff;return ff;
}
signed main(){
T=read();
while(T--){
fg=;n=read();m=read();
rep(i,,n) fa[i]=i,cha[i]=;
rep(i,,m){
x=read();y=read();z=read();x--;
xx=find(x),yy=find(y);
if(xx!=yy){
fa[yy]=xx,cha[yy]=cha[x]+z-cha[y];}
//此处 y连接在x 的子树上,y的深度大
else
if(cha[y]-cha[x]!=z) fg=;
}if(fg) printf("true\n");else printf("false\n");
}
}
5.差分约束+spfa判断(实在不想写这道题了啊啊啊)
#include <cstdio>
#include <vector>
using namespace std; const int maxn = ;
const int maxm = ; struct node{
int to, val;
};
vector<node> e[maxn];
int t, n, m, dis[maxn];
bool vis[maxn], flag; void SPFA(int x){ \\其实就是 DFS
vis[x] = ;
for(int i = ; i < e[x].size(); i++){
node v = e[x][i];
if(dis[v.to] > dis[x] + v.val){
if(vis[v.to]){flag = ; return;}
dis[v.to] = dis[x] + v.val;
SPFA(v.to);
}
}
vis[x] = ;
return;
}
int main(){
scanf("%d", &t);
while(t--){
scanf("%d%d", &n, &m);
for(int i = ; i <= m; i++){
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
e[u-].push_back((node){v, w});
e[v].push_back((node){u-, -*w}); //建图
}
for(int i = ; i <= n; i++){
dis[i] = ;
SPFA(i);
if(flag) { break;}
}
if(flag) printf("false\n");
else printf("true\n");
for(int i = ; i <= n; i++){ \\记得在判断完每一组之后复位
vis[i] = ;
dis[i] = ;
e[i].clear();
}
flag = ;
}
return ;
}
luogu 2294 狡猾的商人 带权并查集的更多相关文章
- 【bzoj1202】[HNOI2005]狡猾的商人 带权并查集
题目描述 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 Ai大于0时表 ...
- BZOJ 1202: [HNOI2005]狡猾的商人 [带权并查集]
题意: 给出m个区间和,询问是否有区间和和之前给出的矛盾 NOIp之前做过hdu3038..... 带权并查集维护到根的权值和,向左合并 #include <iostream> #incl ...
- BZOJ 1202 狡猾的商人(带权并查集)
给出了l,r,w.我们就得知了s[r]-s[l-1]=w.也就是说,点l-1和点r的距离为w. 于是可以使用带权并查集,定义dis[i]表示点i到根节点的距离.查询和合并的时候维护一下就OK了. 如果 ...
- BZOJ1202: [HNOI2005]狡猾的商人(带权并查集)
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4577 Solved: 2249[Submit][Status][Discuss] Descript ...
- BZOJ 1202 狡猾的商人 差分约束or带权并查集
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1202 题目大意: 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的 ...
- Bzoj1202/洛谷P2294 [HNOI2005]狡猾的商人(带权并查集/差分约束系统)
题面 Bzoj 洛谷 题解 考虑带权并查集,设\(f[i]\)表示\(i\)的父亲(\(\forall f[i]<i\)),\(sum[i]\)表示\(\sum\limits_{j=fa[i]} ...
- 【bzoj 1202】[HNOI2005] 狡猾的商人(图论--带权并查集+前缀和)
题意:一个账本记录了N个月以来的收入情况,现在有一个侦探员不同时间偷看到M段时间内的总收入,问这个账本是否为假账. 解法:带权并查集+前缀和. 判断账本真假是通过之前可算到的答案与当前读入的值是否 ...
- luogu 1196 银河英雄传说 带权并查集
带权并查集,其实有点像许多队列问情况的小学奥数 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<= ...
- 【poj 1182】食物链(图论--带权并查集)
题意:有3种动物A.B.C,形成一个"A吃B, B吃C,C吃A "的食物链.有一个人对N只这3类的动物有M种说法:第一种说法是"1 X Y",表示X和Y是同类. ...
随机推荐
- 使用 jstack 查询线程死锁错误日志 定位问题
定位问题 (1) 首先 找到相应的进程 使用 ps -ef | grep 'com.sankuai.qcs.regulation.dispatch' 找到进程的ID;==>21980 (2) t ...
- IDEA在debug时修改变量值
IDEA在debug调试时修改变量值 例如以下代码: int y1 = 0; anchor.setDy1(y1); 在代码中,这个y1永远是0,但是y1本身是个变量 debug的时候获取到这个属性,并 ...
- 读取Properties文件以及中文乱码问题
在java类中常见的读取Properties文件方式,是使用Properties.load(inputStream);的方式但是常常出现中文乱码问题,这就很尴尬了 public synchronize ...
- python numpy 数组拼接
我就写一下我遇到的,更多具体的请看Python之Numpy数组拼接,组合,连接 >>> aarray([0, 1, 2], [3, 4, 5], [6, 7, ...
- MT【217】韦达定理应用
若2018次方程$x^{2018}-4036x^{2017}+a_{2016}x^{2016}+\cdots+a_1x+a_0=0$ 有2018个正实数, 则对于所有可能的方程$\sum\limits ...
- 详解基于朴素贝叶斯的情感分析及 Python 实现
相对于「 基于词典的分析 」,「 基于机器学习 」的就不需要大量标注的词典,但是需要大量标记的数据,比如: 还是下面这句话,如果它的标签是: 服务质量 - 中 (共有三个级别,好.中.差) ╮(╯-╰ ...
- 自学Aruba2.2-Aruba Web UI --Monitoring面板介绍
点击返回:自学Aruba之路 自学Aruba2.2-Aruba Web UI --Monitoring面板介绍 1. Monitoring面板-NETWORK Network Summary ...
- java freemarker导出word时添加或勾选复选框
最近项目导出word碰到一个需求,要求根据数据动态的决定word里的复选框是否勾选, 公司导出word用的是freemarker,相比较其他技术,freemarker可以很容易的控制输出样式, 在wo ...
- 洛谷 P2341 [HAOI2006]受欢迎的牛 解题报告
P2341 [HAOI2006]受欢迎的牛 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢&q ...
- A1052. Linked List Sorting
A linked list consists of a series of structures, which are not necessarily adjacent in memory. We a ...