此题做法多啊

带权并查集,区间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 狡猾的商人 带权并查集的更多相关文章

  1. 【bzoj1202】[HNOI2005]狡猾的商人 带权并查集

    题目描述 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 Ai大于0时表 ...

  2. BZOJ 1202: [HNOI2005]狡猾的商人 [带权并查集]

    题意: 给出m个区间和,询问是否有区间和和之前给出的矛盾 NOIp之前做过hdu3038..... 带权并查集维护到根的权值和,向左合并 #include <iostream> #incl ...

  3. BZOJ 1202 狡猾的商人(带权并查集)

    给出了l,r,w.我们就得知了s[r]-s[l-1]=w.也就是说,点l-1和点r的距离为w. 于是可以使用带权并查集,定义dis[i]表示点i到根节点的距离.查询和合并的时候维护一下就OK了. 如果 ...

  4. BZOJ1202: [HNOI2005]狡猾的商人(带权并查集)

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4577  Solved: 2249[Submit][Status][Discuss] Descript ...

  5. BZOJ 1202 狡猾的商人 差分约束or带权并查集

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1202 题目大意: 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的 ...

  6. Bzoj1202/洛谷P2294 [HNOI2005]狡猾的商人(带权并查集/差分约束系统)

    题面 Bzoj 洛谷 题解 考虑带权并查集,设\(f[i]\)表示\(i\)的父亲(\(\forall f[i]<i\)),\(sum[i]\)表示\(\sum\limits_{j=fa[i]} ...

  7. 【bzoj 1202】[HNOI2005] 狡猾的商人(图论--带权并查集+前缀和)

    题意:一个账本记录了N个月以来的收入情况,现在有一个侦探员不同时间偷看到M段时间内的总收入,问这个账本是否为假账. 解法:带权并查集+前缀和.   判断账本真假是通过之前可算到的答案与当前读入的值是否 ...

  8. luogu 1196 银河英雄传说 带权并查集

    带权并查集,其实有点像许多队列问情况的小学奥数 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<= ...

  9. 【poj 1182】食物链(图论--带权并查集)

    题意:有3种动物A.B.C,形成一个"A吃B, B吃C,C吃A "的食物链.有一个人对N只这3类的动物有M种说法:第一种说法是"1 X Y",表示X和Y是同类. ...

随机推荐

  1. 使用 jstack 查询线程死锁错误日志 定位问题

    定位问题 (1) 首先 找到相应的进程 使用 ps -ef | grep 'com.sankuai.qcs.regulation.dispatch' 找到进程的ID;==>21980 (2) t ...

  2. IDEA在debug时修改变量值

    IDEA在debug调试时修改变量值 例如以下代码: int y1 = 0; anchor.setDy1(y1); 在代码中,这个y1永远是0,但是y1本身是个变量 debug的时候获取到这个属性,并 ...

  3. 读取Properties文件以及中文乱码问题

    在java类中常见的读取Properties文件方式,是使用Properties.load(inputStream);的方式但是常常出现中文乱码问题,这就很尴尬了 public synchronize ...

  4. python numpy 数组拼接

    我就写一下我遇到的,更多具体的请看Python之Numpy数组拼接,组合,连接 >>> aarray([0, 1, 2],       [3, 4, 5],       [6, 7, ...

  5. MT【217】韦达定理应用

    若2018次方程$x^{2018}-4036x^{2017}+a_{2016}x^{2016}+\cdots+a_1x+a_0=0$ 有2018个正实数, 则对于所有可能的方程$\sum\limits ...

  6. 详解基于朴素贝叶斯的情感分析及 Python 实现

    相对于「 基于词典的分析 」,「 基于机器学习 」的就不需要大量标注的词典,但是需要大量标记的数据,比如: 还是下面这句话,如果它的标签是: 服务质量 - 中 (共有三个级别,好.中.差) ╮(╯-╰ ...

  7. 自学Aruba2.2-Aruba Web UI --Monitoring面板介绍

    点击返回:自学Aruba之路 自学Aruba2.2-Aruba Web UI --Monitoring面板介绍 1. Monitoring面板-NETWORK Network Summary      ...

  8. java freemarker导出word时添加或勾选复选框

    最近项目导出word碰到一个需求,要求根据数据动态的决定word里的复选框是否勾选, 公司导出word用的是freemarker,相比较其他技术,freemarker可以很容易的控制输出样式, 在wo ...

  9. 洛谷 P2341 [HAOI2006]受欢迎的牛 解题报告

    P2341 [HAOI2006]受欢迎的牛 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢&q ...

  10. A1052. Linked List Sorting

    A linked list consists of a series of structures, which are not necessarily adjacent in memory. We a ...