HDU 3047 Zjnu Stadium(带权并查集)
来源:互联网 发布:2016网络神曲排行榜 编辑:程序博客网 时间:2024/04/25 14:30
http://acm.hdu.edu.cn/showproblem.php?pid=3047
题意:有n个点,m个条件,依次读入这m个条件,当遇到两个点已经联通的时候,判断一下a到b的距离是否等于x。
注意:该题目所给的a,b是固定的方向,即a到b,如果有1 2 100和3 1 200的条件,2到3的距离则应该是-300。
做法:判断是否联通,可以用并查集来做。但是这题目又存在有向的边权,所以我们在制定两个点相连的时候还要给他们连接的关系上再加上一个边权。最后如果相连的话,用dfs找出他的路长,并且判断。
#include<cstdio>#include<iostream>using namespace std;int par[50005], dis[50005];int n, m;void init(){for(int i = 1; i <= n; i++){par[i] = i;dis[i] = 0;}}int Find(int x){while(par[x] != x)x = par[x];return x;}int Find_dis(int x){int sum = 0;while(par[x] != x){sum += dis[x];x = par[x];}return sum;}void Union(int a, int b, int x, int y, int v){//if(x < y)//{dis[y] = v - Find_dis(b) + Find_dis(a);par[y] = x;//}//else//{//dis[x] = v - dis[a] + dis[b];//par[x] = y;//}}int main(){int a, b, v, x, y, cnt;while(cin >> n >> m){cnt = 0;init();for(int i = 0; i < m; i++){scanf("%d%d%d", &a, &b, &v);x = Find(a);y = Find(b);if(x != y)Union(a, b, x, y, v);else{if(Find_dis(a) - Find_dis(b) != v)cnt++;}}cout << cnt << endl;}return 0; }
0 0
- HDU 3047 Zjnu Stadium (带权并查集)
- hdu 3047 Zjnu Stadium(带权并查集)
- hdu 3047 Zjnu Stadium (带权并查集)
- HDU 3047 Zjnu Stadium 带权并查集
- hdu 3047 Zjnu Stadium (带权并查集)
- HDU 3047 Zjnu Stadium 带权并查集
- HDU 3047 Zjnu Stadium 带权并查集
- HDU - 3047 Zjnu Stadium 带权并查集
- hdu 3047 Zjnu Stadium【带权并查集】
- hdu 3047 Zjnu Stadium 带权并查集
- hdu 3047 Zjnu Stadium 带权并查集
- HDU 3047 Zjnu Stadium(带权并查集)
- hdu 3047 Zjnu Stadium【带权并查集】
- HDU 3047 Zjnu Stadium(带权并查集)
- HDU 3047Zjnu Stadium(带权并查集)
- Zjnu Stadium(hdu-3047)(带权并查集)
- HDU 3047 Zjnu Stadium 带权并查集
- Hdu 2047 Zjnu Stadium(带权并查集)
- 屏幕色温
- 【Coursera】编程题 Collinear Points
- java 文件读取
- 技术积累
- Redis使用详解之redhat系统上安装redis-3.2.8
- HDU 3047 Zjnu Stadium(带权并查集)
- leetcode解题之121 # Best Time to Buy and Sell Stock
- Matlab中几种括号的区别
- Simplify Path
- android四种启动lanuchMode
- 动画效果
- 高德地图aMap.moveCamera(CameraUpdateFactory.zoomTo(15));方法不起作用。
- 学习记录 jsp
- [BZOJ1010]玩具装箱:DP决策单调性