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. UEM用户行为了如指掌!

    “千呼万唤始出来”,万众期待的UEM正式与宝宝们见面啦~~~ 今天很多人来问小编,Web咋不见了,表急,Web并没有消失,而是重磅升级为UEM啦!!! 什么是UEM呢?UEM全称User Experi ...

  2. ansible(3)

    一.setup模块 ansible的setup模块主要用来收集信息,查看参数: [root@localhost ~]# ansible-doc -s setup # 查看参数,部分参数如下: filt ...

  3. 一、Mosquitto 介绍&安装

    一.Mosquitto 介绍 一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的 ...

  4. postman设置环境变量,字段值经过json转换后数值字节长度超过上限的问题

    在使用Tests进行环境变量的设置时,遇到这么一种情况,在返回的responseBody中的userId字段,字段返回的是数值类型,再经过json转换之后,发现保存的值跟接口返回的值不一致:如下图: ...

  5. zookeeper集群-solrcloud集群

    本文只写具体的搭建过程,具体原理请看官网文档.国内博客都是基本上都是通过tomcat搭建的solr,本文是通过内部集成的jetty容器搭建. 一.zookeeper集群搭建 1.安装JAVA环境,版本 ...

  6. Bootstrap fileinput v1.0(ssm版)

    前言bootstrap fileinput是一个很好的文件上传插件.但是官方不出api,这就尴尬了.百度一下,每个人写法都不相同,好多代码本身都是错的.我修改后才能跑起来.综上所述:所以今天我摸索了一 ...

  7. Python面试题之Python中的类和实例

    0x00 前言 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规范,从这个角度来看,在以后我们学习设计模式的时候, ...

  8. Python3.6(windows系统)解决编码问题

    Python3.6(windows系统)解决编码问题 1,py文件代码: import urllib.request url = "http://www.douban.com/" ...

  9. Applet再学习

    ZLYD团队Apllet学习笔记 Applet再学习 Applet是什么? Applet又称为Java小应用程序,是能够嵌入到一个HTML页面中,并且可通过Web浏览器下载和执行的一种Java类 .A ...

  10. Java面试知识点总结及解析

    声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入.本篇文章来自一位很资深的前辈对于最近java面试题目所做的总结归纳,有170道题目 ,知识面很广 ,而且这位前辈对于每个 ...