Problem

  • 每个点的权为删除这个点后图中连通块的个数,求权值前m大的点。

Solution

  • 求点-双连通分量,一个点的权值为总连通块数+该点出现在不同点连通分量的次数-1。
  • 该点出现在不同点连通分量的次数就是把该点删掉后原来所属的那个连通块会分裂成的连通块的个数。

Code

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1e4+5;
const int maxm = 1e6+5;
int bccno[maxn],iscut[maxn],dfn[maxn],low[maxn],bccnt,stop,dindex,ans,ansn[maxn];
int cnt,last[maxn],n,m;
struct edge{int u,v,next;
}e[maxm];
struct node{int u,num;
}nd[maxn];
bool cmp(const node &a,const node &b)
{if(a.num==b.num)return a.u<b.u;return a.num>b.num;
}
void add(int u,int v)
{e[++cnt].v=v;e[cnt].next=last[u];last[u]=cnt;e[++cnt].v=u;e[cnt].next=last[v];last[v]=cnt;
}
vector<int> bcc[maxn];
edge sta[maxm];
void dfs(int u,int fa)
{low[u]=dfn[u]=++dindex;int child=0;for(int i=last[u];i;i=e[i].next){int v=e[i].v;if(!dfn[v]){child++;sta[++stop]={u,v};dfs(v,u);low[u]=min(low[u],low[v]);if(low[v]>=dfn[u]) {iscut[u]=1;bccnt++;bcc[bccnt].clear();while(1){edge x=sta[stop--];if(bccno[x.u]!=bccnt){bccno[x.u]=bccnt;bcc[bccnt].push_back(x.u);}if(bccno[x.v]!=bccnt){bccno[x.v]=bccnt;bcc[bccnt].push_back(x.v);}if(x.u==u&&x.v==v) break;}    }}else if(dfn[v]<dfn[u]&&v!=fa){sta[++stop]={u,v};low[u]=min(low[u],dfn[v]);} }if(fa<0&&child==1) iscut[u]=0;
}
void findbcc()
{//多组数据先初始化dfn,low,bccnt,bccno,iscut dindexfor(int i=1;i<=n;i++)if(!dfn[i]){ans++;dfs(i,0);}
}
void init()
{memset(last,0,sizeof(last));memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));memset(iscut,0,sizeof(iscut));memset(bccno,0,sizeof(bccno));memset(ansn,0,sizeof(ansn));bccnt=ans=dindex=cnt=0;
}
int main()
{//  freopen("1.txt","w",stdout);int flag=0;while(cin>>n>>m&&n){init();flag = 1;init();int u,v;while(scanf("%d%d",&u,&v)&&u!=-1)add(u+1,v+1);findbcc();for(int i=1;i<=bccnt;i++){for(int j=0;j<bcc[i].size();j++)ansn[bcc[i][j]]++;}for(int i=1;i<=n;i++){nd[i].u=i;nd[i].num=ansn[i];}sort(nd+1,nd+1+n,cmp);for(int i=1;i<=m;i++)cout<<nd[i].u-1<<' '<<(ans+nd[i].num-1)<<endl;cout<<endl;}return 0;
}

UVA10765 Doves and bombs(双连通分量)相关推荐

  1. Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)...

    转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html 基本概念: 1.割点:若删掉某点后,原连通图 ...

  2. AcWing 397. 逃不掉的路(边双连通分量缩点成树 + 树链剖分乱搞)

    整理的算法模板合集: ACM模板 我们知道在同一个边双连通分量中的点没有必经边(因为至少有两条分离的路径). 所以我们直接tarjan求出桥后缩点,然后求一下树上两点间的距离即可. 那么如何求树上两点 ...

  3. UVA1364 Knights of the Round Table(双连通分量、二分图染色,超详细解释)

    整理的算法模板合集: ACM模板 UVA1364 Knights of the Round Table 题目中要求互相有憎恨关系的人不能坐在相邻的位置,一个圆桌可以很形象地看作是一个环,也就是说我们两 ...

  4. 【图论专题】无向图的双连通分量

    A.AcWing 395. 冗余路径 结论:变成边双连通分量所需要新建的边数 无向图 连多少条边使得整个无向图变成任意两个点之间都有两条完全不相同的路径. 结论1:任意两个点之间都有两条完全不相同的路 ...

  5. Uvalive 3523 - Knights of the Round Table (双连通分量+二分图)

    题目链接 https://vjudge.net/problem/UVALive-3523 [题意] 有n个骑士经常举行圆桌会议,每次圆桌会议应至少有3个人参加且人数必须是奇数,相互憎恨的骑士不能坐在圆 ...

  6. UVA 610 Street Directions 双连通分量

    首先找到全部双连通分量,然后对于某一个结点数大于2的连通分量,可以把全部的边改成单向的,按DFS的顺序. 结点数为2的也就是一条为桥的边,必须保持双向. //#pragma comment(linke ...

  7. [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分)

    [Codeforces 555E]Case of Computer Network(Tarjan求边-双连通分量+树上差分) 题面 给出一个无向图,以及q条有向路径.问是否存在一种给边定向的方案,使得 ...

  8. poj 3352 双连通分量

    至少加几条边成为双连通分量 #include <iostream> #include <cstdio> #include <cstring> using names ...

  9. 无向图——双连通分量

    双连通图:在无向图连通图中,如果删除该图中的任意一点和依附它的边,不改变图的连通性,则称该图为双连通的无向图. 由上述定义可知,双连通分量中,每两个结点之间至少有两条不同的路径可以相互到达. 割点:在 ...

最新文章

  1. 谷歌最新提出无需卷积、注意力,纯MLP构成的视觉架构!网友:MLP is All You Need?
  2. linux的学习重点,Linux 学习重点记录之三
  3. IDEA报错:Loading class `com.mysql.jdbc.Driver‘. This is deprecated. The new driver class is `com.mysql
  4. autojs定时可以选定日期吗_Excel工作表中的7个“一键完成”,你真的都了解、掌握吗?...
  5. C++类指针类型的成员变量的浅复制与深复制
  6. bdd cucumber_如何使用BDD构建坚如磐石的Ruby on Rails应用
  7. 辨异 —— 不同的编程语言(编译型语言、解释型语言、动态语言、静态语言)...
  8. 链表的简单操作-----删除,添加,查找(Xcode)
  9. 一些代码规范(收集)
  10. IBatisNet初步体验
  11. 3S基础知识:MapInfo应用MapX编程实现地图数据查询
  12. 为什么计算机网络使用数字信号,什么是数字信号
  13. 开三个iframe不断刷访问量
  14. java ppt转图片 失真_java poi 实现ppt转图片(解决图片不高清问题)
  15. 大写加下划线转换驼峰规则
  16. 机器视觉1:图像预处理与瑕疵检测
  17. MFC——CWnd类
  18. POJ 2509 Peter's smokes
  19. 百度鹰眼轨迹后台的移植
  20. Java面试 一篇就够[大量链接+图文]

热门文章

  1. 微信小程序:小程序服务器域名配置合法域名
  2. 赤峰中考计算机考试软件,赤峰市2018中考信息测试题单项选择部分-初三信息技术试卷与试题.pdf...
  3. 数字化孪生管理平台运用现状及技术前景
  4. CPU卡开发指南(四)原理解析
  5. 人工智能时代下,Python与C/C++谁将成为人工智能核心算法选择?
  6. 配置HTTPS,和HTTPS转HTTP
  7. Kubernetes详解(四十一)——Secret创建
  8. 中国剩余定理 (51nod 1079)
  9. 五种蓝牙耳机,到底谁才是你的菜
  10. LRU Cache 缓存