题目给一张有向图G,要在其传递闭包T(G)上删除若干点,使得留下来的所有点具有单连通性,问最多能留下几个点。

其实这道题在T(G)上的连通性等同于在G上的连通性,所以考虑G就行了。

那么问题就简单了,强连通分量缩点,强连通分量必定要一起留下,从入度0到出度0的强连通分量找到一条包含最多点的通路即可。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 1111
#define MAXM 55000
struct Edge{
int u,v,next;
}edge[MAXM];
int NE,head[MAXN];
void addEdge(int u,int v){
edge[NE].u=u; edge[NE].v=v; edge[NE].next=head[u];
head[u]=NE++;
}
int top,stack[MAXN];
bool instack[MAXN];
int dn,dfn[MAXN],low[MAXN];
int bn,belong[MAXN],size[MAXN];
void tarjan(int u){
dfn[u]=low[u]=++dn;
stack[++top]=u; instack[u]=;
for(int i=head[u]; i!=-; i=edge[i].next){
int v=edge[i].v;
if(dfn[v]==){
tarjan(v);
low[u]=min(low[u],low[v]);
}else if(instack[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(low[u]==dfn[u]){
int v; ++bn;
do{
v=stack[top--];
instack[v]=;
belong[v]=bn;
++size[bn];
}while(u!=v);
}
}
int d[MAXN];
int dfs(int u){
if(d[u]) return d[u];
int res=;
for(int i=head[u]; i!=-; i=edge[i].next){
int v=edge[i].v;
res=max(res,dfs(v));
}
return d[u]=res+size[u];
}
int main(){
int t,n,m,a,b;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
NE=;
memset(head,-,sizeof(head));
while(m--){
scanf("%d%d",&a,&b);
addEdge(a,b);
}
top=dn=bn=;
memset(dfn,,sizeof(dfn));
memset(instack,,sizeof(instack));
memset(size,,sizeof(size));
for(int i=; i<=n; ++i){
if(dfn[i]==) tarjan(i);
}
int tmp=NE; NE=;
memset(head,-,sizeof(head));
for(int i=; i<tmp; ++i){
int u=belong[edge[i].u],v=belong[edge[i].v];
if(u==v) continue;
addEdge(u,v);
}
memset(d,,sizeof(d));
int res=;
for(int i=; i<=bn; ++i){
res=max(res,dfs(i));
}
printf("%d\n",res);
}
return ;
}

最新文章

  1. vim格式化代码实际上就是 &quot;缩进代码&quot;, 命令是等号=
  2. Linux 下配置php开发环境
  3. log4j日志-liu
  4. Swiper – 经典的移动触摸滑块插件【免费】
  5. java 中 静态块的作用
  6. C# 跨线程操作无效
  7. html中css三种常见的样式选择器 zz
  8. MATLAB符号运算
  9. EMVTag系列17《9F66 终端交易属性》
  10. 浅谈B+树索引的分裂优化(转)
  11. ThinkPHP模板(一)
  12. 自增锁预分配ID
  13. 49. Anagrams
  14. android140 360 黑名单 启动service和分页加载
  15. &lt;微信应用开发系列&gt;定时刷新AccessToken
  16. c#操作sqlite
  17. 【原创】JQWidgets-TreeGrid 1、快速入门
  18. Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))
  19. BZOJ2264 : Free Goodies
  20. iframe中跨域页面访问parent的方法

热门文章

  1. UITableView 委托方法总结
  2. Capistrano SSH::AuthenticationFailed, not prompting for password
  3. cocos2d回忆
  4. cookie注入讲解
  5. 一个很不错的适合PHPER们书单,推荐给大家【转】
  6. Longest Common Subsequence &amp; Substring &amp; prefix
  7. poj 1328
  8. iOS的 context 和Android 中的 canvas
  9. jQuery操作复选框的简单使用
  10. Greedy:Yogurt factory(POJ 2393)