【UVA11324】The Largest Clique (SCC)
题意:
给一张有向图G,求一个结点数最大的结点集,使得该结点中任意两个结点 u 和 v满足:要么 u 可以到达 v, 要么 v 可以到达 u(u 和 v 相互可达也可以)。
分析:
Tarjan求SCC缩点,SCC的节点数为新点点权,然后求DAG上权最大的的路径。
代码如下:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define Maxn 1010
#define Maxm 50010 struct node
{
int x,y,next;
}t[Maxm]; int first[Maxn],dfn[Maxn],low[Maxn],sta[Maxn],scc[Maxn],sum[Maxn];
bool bj[Maxn],bj2[Maxn],map[Maxn][Maxn];
int cnt,sl,cl; int mymin(int x,int y) {return x<y?x:y;}
int mymax(int x,int y) {return x>y?x:y;} void ffind(int x)
{
dfn[x]=low[x]=++cnt;
sta[++sl]=x;
for(int i=first[x];i;i=t[i].next)
{
int y=t[i].y;
if(dfn[y]==)
{
ffind(y);
low[x]=mymin(low[x],low[y]);
}
else if(scc[y]==) low[x]=mymin(low[x],dfn[y]);
}
if(dfn[x]==low[x])
{
cl++;
while()
{
int z=sta[sl--];
scc[z]=cl;
sum[cl]++;
if(z==x) break;
}
}
} int dfs(int x)
{
int ans=;
bj[x]=;
for(int i=;i<=cl;i++) if(map[x][i]==&&bj[i]==)
ans=mymax(ans,dfs(i));
ans+=sum[x];
bj[x]=;
return ans;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,m,ans=;
scanf("%d%d",&n,&m);
memset(first,,sizeof(first));
memset(dfn,,sizeof(dfn));
memset(sum,,sizeof(sum));
memset(bj,,sizeof(bj));
memset(map,,sizeof(map));
memset(scc,,sizeof(scc));
cnt=;sl=;cl=;
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&t[i].x,&t[i].y);
t[i].next=first[t[i].x];first[t[i].x]=i;
}
for(int i=;i<=n;i++) if(dfn[i]==) ffind(i);
for(int i=;i<=m;i++) if(scc[t[i].x]!=scc[t[i].y]) map[scc[t[i].x]][scc[t[i].y]]=;
for(int i=;i<=cl;i++) ans=mymax(ans,dfs(i));
printf("%d\n",ans);
}
return ;
}
UVA11324
2016-03-17 16:54:20
【UVA11324】The Largest Clique (SCC)的更多相关文章
- 【UVA11324】 The Largest Clique (Tarjan+topsort/记忆化搜索)
UVA11324 The Largest Clique 题目描述 给你一张有向图 \(G\),求一个结点数最大的结点集,使得该结点集中的任意两个结点 \(u\) 和 \(v\) 满足:要么 \(u\) ...
- 【BZOJ1797】[AHOI2009]最小割(网络流)
[BZOJ1797][AHOI2009]最小割(网络流) 题面 BZOJ 洛谷 题解 最小割的判定问题,这里就当做记结论吧.(源自\(lun\)的课件) 我们先跑一遍最小割,求出残量网络.然后把所有还 ...
- 【Swift】iOS开发历险记(二)
前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯 ...
- 洛谷P3379 【模板】最近公共祖先(LCA)
P3379 [模板]最近公共祖先(LCA) 152通过 532提交 题目提供者HansBug 标签 难度普及+/提高 提交 讨论 题解 最新讨论 为什么还是超时.... 倍增怎么70!!题解好像有 ...
- 【函数】Oracle函数系列(2)--数学函数及日期函数
[函数]Oracle函数系列(2)--数学函数及日期函数 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...
- 【原创】OllyDBG 入门系列(一)-认识OllyDBG
****** http://blog.fishc.com/645.html 标 题: [原创]OllyDBG 入门系列(一)-认识OllyDBG作 者: CCDebuger时 间: 2006-0 ...
- CJOJ 2022 【一本通】简单的背包问题(搜索)
CJOJ 2022 [一本通]简单的背包问题(搜索) Description 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,-wn. 问能否从这n件物品中选择若干件放入 ...
- 【BZOJ3680】吊打XXX(模拟退火)
[BZOJ3680]吊打XXX(模拟退火) 题面 BZOJ 题解 模拟退火... 就是模拟退火 然后这题有毒 各种调参数之后终于\(AC\)了.. 这种题就是玄学呀... 温度要调大 最后跑完还要向四 ...
- 【BZOJ3671】【NOI2014】随机数据生成器(贪心)
[BZOJ3671][NOI2014]随机数据生成器(贪心) 题面 BZOJ 题解 前面的模拟 真的就是语文阅读理解题目 理解清楚题目意思 然后就会发现要求的就是一个贪心 从小往大枚举,检查当前数能不 ...
随机推荐
- ViewPager的用法实例
前言:最近在做一个项目,文件管理器,能够在主界面通过滑动选择:手机,内存卡,云端的不同界面,因此就用到了ViewPager. 起步阶段,ViewPager写好了,对应的Adapter也写好了,测试通过 ...
- myeclipse自动生成可持久化类的映射文件的方法
1.打开DB Browser,新建一个数据库的连接,找到想要持久化操作的数据库表的图标,右键选择hibernate reverse engineering 2.之后出现如下所示: java src f ...
- OKHttp的简单使用
一方面,最近关于OKHttp的讨论甚嚣尘上,另一方面,我最近也更新了android6.0,发现在6.0中HttpClient不能使用了,于是决定抽时间也看一下OKHttp,总结了一点东西,与大家分享. ...
- Android开发之ContentProvider(内容提供者)
1. ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问 ...
- Java 之文件IO编程 之写入
package com.sun; /* * 操作对文件IO的写 * 2014-08-10 */ import java.io.*; public class File_Write { public s ...
- Http协议、线程、线程池
Socket模拟服务端运行代码: 1:启动服务端监听的服务,并接受客户端的连接 1.1 创建Socket Socket listenSocket=new Socket(AddressFamily.In ...
- IMPDP hangs, session wait “wait for unread message on broadcast channel”
昨晚有个朋友说加班在IMPDP数据, 在导入中途突然没有了进展,挂在那里不动了,impdp 窗口也没有报错, 一直等了1个多小时,说是impdp使用了parallel,怀疑是parallel参数出了问 ...
- angularjs服务常见用法
服务可以再应用的整个生命周期内保持数据,不会在切换路由或者重新加载视图时被清楚掉(控制器只有在需要时才被实例化) 服务是一个单例对象,在每个应用中只会被实例化一次 服务在应用的生命周期内保存数据 an ...
- 多重背包的入门题目HDU1171,2191,2844.
首先,什么叫多重背包呢? 大概意思就是:一个背包有V总容量,有N种物品,其价值分别为Val1,Val2--,Val3,体积对应的是Vol1,Vol2,--,Vol3,件数对应Num1,Num2--,N ...
- State 模式
State模式中我们将状态逻辑和动作实现进行分离.允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类:在一个状态即将结束的时候启用下一个状态. /////////state.h// ...