[HNOI2005]狡猾的商人(并查集维护前缀和)
2016-07-02 10:53
387 查看
并查集维护前缀和,实际上就是一个差分约束系统,但是这里面只有“=” 罢了,所以可以用并查集做
感觉很多题,自己做都没有恰当的思路,思路都很乱,并查集真的很灵活
val表示从到根节点相差多少。如果在一个集合里,通过减取差,即可知道他们之间的距离
不在一个集合的话,就把他们连起来
我想,以后做题,没有必要用最优解,我可以尝试用自己的方法来做,实在不行再看题解!!
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int fa[209],val[209],n,m;
int find(int x)
{
if (x==fa[x]) return x;
int k=find(fa[x]);
val[x]+=val[fa[x]];
return fa[x]=k;
}
int main()
{
int T;
scanf("%d",&T);
int s,t,v;
while(T--)
{
scanf("%d%d",&n,&m);
for (int i=0;i<=n+1;i++) fa[i]=i;
memset(val,0,sizeof(val));
bool o=true;
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&s,&t,&v);//多组数据要读入完!!
int fs=find(s-1),ft=find(t);
if (fs==ft)
if (val[s-1]-val[t]!=v) o=false;//所以这里不能有break;
if (fs!=ft)
{
fa[fs]=ft;
val[fs]=val[t]+v-val[s-1];
}
}
if (o) printf("true\n");else printf("false\n");
}
return 0;
}
感觉很多题,自己做都没有恰当的思路,思路都很乱,并查集真的很灵活
val表示从到根节点相差多少。如果在一个集合里,通过减取差,即可知道他们之间的距离
不在一个集合的话,就把他们连起来
我想,以后做题,没有必要用最优解,我可以尝试用自己的方法来做,实在不行再看题解!!
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int fa[209],val[209],n,m;
int find(int x)
{
if (x==fa[x]) return x;
int k=find(fa[x]);
val[x]+=val[fa[x]];
return fa[x]=k;
}
int main()
{
int T;
scanf("%d",&T);
int s,t,v;
while(T--)
{
scanf("%d%d",&n,&m);
for (int i=0;i<=n+1;i++) fa[i]=i;
memset(val,0,sizeof(val));
bool o=true;
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&s,&t,&v);//多组数据要读入完!!
int fs=find(s-1),ft=find(t);
if (fs==ft)
if (val[s-1]-val[t]!=v) o=false;//所以这里不能有break;
if (fs!=ft)
{
fa[fs]=ft;
val[fs]=val[t]+v-val[s-1];
}
}
if (o) printf("true\n");else printf("false\n");
}
return 0;
}
相关文章推荐
- cmseasy最新版任意权限getshell
- Net Core在Linux环境
- Linux 性能优化之 IO 子系统 系列 图
- 分布式事务及分布式系统一致性解决方案
- Linux安全工具之fail2ban防爆力破解
- 智能指针-----AutoPtr
- Windows7+CentOS7 启动项丢失问题解决
- hadoop mapreduce
- android 开发资源网站
- openwrt web登录页面的账号固定
- linux命令目录
- LINUX 文件系统JBD ----深入理解Fsync
- window7或8下,U盘安装Centos6.5双系统,问题总结
- nginx for windows安装-内存使用情况
- install oh-my-zsh error file name too long
- The book of OpenLayers 3
- CentOS7 minimal installation 上网
- linux IO 内核参数调优 之 原理和参数介绍
- 查看linux性能信息cpu-内存-硬盘-网卡
- Linux umount设备时出现device is busy解决方法