蓝桥杯 PREV-22 国王的烦恼
2017-03-19 18:24
183 查看
题目链接:http://lx.lanqiao.cn/problem.page?gpid=T114
题意:按照一定的顺序(在本题中是按照天数大小)去掉边,问每次去掉边是否会影响图的连通性,即是不是割边。和另外一题去掉点判断是不是割点很相似。
解题方案:离线处理,将顺序存储下来,然后逆序建图,当建图的过程中出现连通->不连通,反过来就是不连通->连通,即在建图的时候两个连通分支因为这条边而连通了起来,故只需要通过并查集在建图的时候判断一下两个分支的父节点是不是一样就可以。
题意:按照一定的顺序(在本题中是按照天数大小)去掉边,问每次去掉边是否会影响图的连通性,即是不是割边。和另外一题去掉点判断是不是割点很相似。
解题方案:离线处理,将顺序存储下来,然后逆序建图,当建图的过程中出现连通->不连通,反过来就是不连通->连通,即在建图的时候两个连通分支因为这条边而连通了起来,故只需要通过并查集在建图的时候判断一下两个分支的父节点是不是一样就可以。
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <cmath> #include <vector> #include <queue> #include <stack> #include <set> #include <map> using namespace std; #define FOR(i,k,n) for(int i=k;i<n;i++) #define FORR(i,k,n) for(int i=k;i<=n;i++) #define scan(a) scanf("%d",&a) #define scann(a,b) scanf("%d%d",&a,&b) #define scannn(a,b,c) scanf("%d%d%d",&a,&b,&c) #define mst(a,n) memset(a,n,sizeof(a)) #define ll long long #define N 10005 #define mod 1000000007 #define INF 0x3f3f3f3f const double eps=1e-8; const double pi=acos(-1.0); int f ; struct node { int u,v,t; }edge[100005]; bool cmp(node a,node b) { return a.t>b.t; } int Find(int x) { return f[x]==x?x:f[x]=Find(f[x]); } bool Union(int x,int y) { int fx=Find(x); int fy=Find(y); if(fx!=fy) { f[fx]=fy; return true; } else return false; } int main() { int n,m; cin>>n>>m; FOR(i,0,N) f[i]=i; FOR(i,0,m) cin>>edge[i].u>>edge[i].v>>edge[i].t; sort(edge,edge+m,cmp); int ans=0; int pre=-1,cur=-1; FOR(i,0,m) { cur=edge[i].t; if(Union(edge[i].u,edge[i].v)&&cur!=pre) ans++,pre=cur; } cout<<ans<<endl; return 0; }
相关文章推荐
- 国王的烦恼蓝桥杯 并查集
- 蓝桥杯国王的烦恼
- 蓝桥杯 国王的烦恼 反向并查集
- 蓝桥杯 历年试题 国王的烦恼
- 蓝桥杯历届试题——国王的烦恼(并查集)
- 蓝桥杯 国王的烦恼
- 历届试题 国王的烦恼 (蓝桥杯)
- 蓝桥杯 历届试题 国王的烦恼
- 蓝桥杯 历届试题 国王的烦恼
- 蓝桥杯—国王的烦恼
- [蓝桥杯][历届试题]国王的烦恼
- 问题 1435: [蓝桥杯][历届试题]国王的烦恼
- 蓝桥杯历届试题 国王的烦恼(思维并查集)
- 蓝桥杯 国王的烦恼(并查集)
- 蓝桥杯 历届试题 国王的烦恼(并查集)
- 蓝桥杯 历届试题 国王的烦恼
- 蓝桥杯 国王的烦恼
- 蓝桥杯--- 历届试题 国王的烦恼 (并查集)
- [蓝桥杯][历届试题]国王的烦恼
- (蓝桥杯)历届试题 国王的烦恼 (并查集)