http://codeforces.com/problemset/problem/160/D

这道题要求哪条边存在于某个最小生成树中,哪条边不存在于最小生成树中,哪条边绝对存在于最小生成树中

明显桥边一定存在于所有最小生成树中,然而怎么处理存在某个最小生成树的边呢?

借助kruskal算法的性质,由小到大,每次处理同一权值的边,如果边连接的点已经联通就不要管,否则那些处理的边一定存在于某最小生成树上

批量处理的思想很巧妙

#include <cstdio>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
const int maxn=2e5+5;
int first[maxn];
struct edge{
int t,ind,nxt;
}e[maxn];
int from[maxn],to[maxn],cost[maxn],index[maxn];
int sta[maxn];
int n,m,len; void addedge(int f,int t,int ind,int i){
e[i].nxt=first[f];
first[f]=i;
e[i].t=t;
e[i].ind=ind;
}
int par[maxn],num[maxn];
int fnd(int x){return par[x]==x?x:par[x]=fnd(par[x]);}
void unit(int a,int b){
if(fnd(a)==fnd(b))return;
num[fnd(b)]+=num[fnd(a)];
num[fnd(a)]=0;
par[fnd(a)]=fnd(b);
}
bool cmp(int a,int b) {return cost[a]<cost[b];} int dfn[maxn],low[maxn],cnt;
void dfs(int s,int f){
dfn[s]=low[s]=++cnt;
for(int p=first[s];p!=0;p=e[p].nxt){
int t=e[p].t;
if(p==(((f-1)^1)+1))continue;
if(dfn[t]==0){
dfs(t,p);
if(low[t]>dfn[s]){
sta[e[p].ind]=2;
}
else{
low[s]=min(low[s],low[t]);
}
}
else {
low[s]=min(low[s],dfn[t]);
}
}
} int st[maxn],tail;
void kruskal2(){
sort(index,index+m,cmp);
for(int i=0;i<m&&num[fnd(1)]<n;){
int j=i;
while(cost[index[i]]==cost[index[j]]&&j<m){j++;}
for(int k=i;k<j;k++){
int indk=index[k];
if(fnd(from[indk])!=fnd(to[indk])){
st[tail++]=indk;
sta[indk]=1;
}
}
for(int p=0;p<tail;p++){
int tp=st[p];
int f=fnd(from[tp]),t=fnd(to[tp]);
addedge(f,t,tp,++len);
addedge(t,f,tp,++len);
}
for(int p=0;p<tail;p++){
int tp=st[p];
int f=fnd(from[tp]),t=fnd(to[tp]);
dfs(f,0);
unit(f,t);
}
cnt=0;
len=0;
for(int p=0;p<tail;p++){
int tp=st[p];
int f=fnd(from[tp]),t=fnd(to[tp]);
first[f]=first[t]=0;
dfn[f]=dfn[t]=0;
} i=j;
tail=0;
}
} int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){par[i]=i;num[i]=1;} for(int i=0;i<m;i++){
scanf("%d%d%d",from+i,to+i,cost+i);
index[i]=i;
}
kruskal2(); for(int i=0;i<m;i++){
if(sta[i]==2)puts("any");
else if(sta[i]==1)puts("at least one");
else puts("none");
}
return 0;
}

  

CF 160D Edges in MST 最小生成树的性质,寻桥,缩点,批量处理 难度:3的更多相关文章

  1. Codeforces 160D Edges in MST tarjan找桥

    Edges in MST 在用克鲁斯卡尔求MST的时候, 每个权值的边分为一类, 然后将每类的图建出来, 那些桥就是必须有的, 不是桥就不是必须有. #include<bits/stdc++.h ...

  2. [CF160D]Edges in MST (最小生成树+LCA+差分)

    待填坑 Code //CF160D Edges in MST //Apr,4th,2018 //树上差分+LCA+MST #include<cstdio> #include<iost ...

  3. Codeforces 160 D. Edges in MST

    \(>Codeforces \space 160 D. Edges in MST<\) 题目大意 : 给出一张带权无向图,求对于这张图上的每一条边,其是必然存在于每一种最小生成树中,还是至 ...

  4. [CF160D]Edges in MST

    [CF160D]Edges in MST 题目大意: 一个\(n(n\le10^5)\)个点,\(m(m\le10^5)\)条边的连通图.对于图中的每条边,判断它与该图最小生成树的关系: 在该图所有的 ...

  5. MST最小生成树

    首先,贴上一个很好的讲解贴: http://www.wutianqi.com/?p=3012 HDOJ 1233 还是畅通工程 http://acm.hdu.edu.cn/showproblem.ph ...

  6. [BZOJ1937][SHOI2004]Mst最小生成树(KM算法,最大费用流)

    1937: [Shoi2004]Mst 最小生成树 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 802  Solved: 344[Submit][Sta ...

  7. 【BZOJ1937】[Shoi2004]Mst 最小生成树 KM算法(线性规划)

    [BZOJ1937][Shoi2004]Mst 最小生成树 Description Input 第一行为N.M,其中 表示顶点的数目, 表示边的数目.顶点的编号为1.2.3.…….N-1.N.接下来的 ...

  8. [poj1679]The Unique MST(最小生成树)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28207   Accepted: 10073 ...

  9. 【KM】BZOJ1937 [Shoi2004]Mst 最小生成树

    这道题拖了好久因为懒,结果1A了,惊讶∑( 口 || [题目大意] 给定一张n个顶点m条边的有权无向图.现要修改各边边权,使得给出n-1条边是这张图的最小生成树,代价为变化量的绝对值.求最小代价之和. ...

随机推荐

  1. Faster R-CNN论文详解 - CSDN博客

    废话不多说,上车吧,少年 paper链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks ...

  2. Tickets---hdu1260 (简单dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260 题意就是有n个人排队买票,每个人需要的时间是a[i] (1=< i <=N),但是现 ...

  3. 002-spring cache 基于声明式注解的缓存-01-Cacheable annotation

    一.简述 对于缓存声明,抽象提供了一组Java注解: @Cacheable触发缓存填充(这里一般放在创建和获取的方法上) @CacheEvict触发缓存驱逐(用于删除的方法上) @CachePut更新 ...

  4. MySql数据库批量备份命令

    rd d:\mysql_data-BAK /s /qmd d:\mysql_data-BAKxcopy d:\mysql_data d:\mysql_data-BAK /e

  5. 1.2 Getting Started--Naming Conventions(命名约定)

    Ember.js使用一个运行时解析器去连接你的对象而没有很多样板文件.作为一个开发者,如果你把code放到约定好的位置这个解析器会自动工作.   一.The Application     1. 当你 ...

  6. 限制可编辑div只能输入纯文本

    本博客转载自张鑫旭大神的一篇文章:小tip: 如何让contenteditable元素只能输入纯文本,原文地址:http://www.zhangxinxu.com/wordpress/2016/01/ ...

  7. visio基础教程(一)

  8. Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2)

    A. The King's Race 签. #include <bits/stdc++.h> using namespace std; #define ll long long ll n, ...

  9. 20172305 2018-2019-1 《Java软件结构与数据结构》第二周学习总结

    20172305 2018-2019-1 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 本周内容主要为书第三章和第四章的内容: 第三章(以数组来替代栈的作用) 集合(聚集 ...

  10. 2017-2018-1 JaWorld 团队作业--冲刺5

    2017-2018-1 JaWorld 团队作业--冲刺5(20162310) 团队项目之战斗机类分析博客 总结 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏 游戏中所有模 ...