题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=30726

【思路】

强连通分量+动归。

求scc后缩点,以scc中的节点数作为权值,则问题转化为求一个DAG上的最大权路径,可以用dp求解。

【代码】

 #include<cstdio>
#include<stack>
#include<vector>
#include<cstring>
#include<iostream>
using namespace std; const int maxn = +;
const int maxm = +; int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt;
vector<int> G[maxn];
stack<int> S; int dfs(int u) {
pre[u]=lowlink[u]=++dfs_clock;
S.push(u);
for(int i=;i<G[u].size();i++) {
int v=G[u][i];
if(!pre[v]) {
dfs(v);
lowlink[u]=min(lowlink[u],lowlink[v]);
}
else if(!sccno[v]) {
lowlink[u]=min(lowlink[u],pre[v]);
}
}
if(lowlink[u]==pre[u]) {
scc_cnt++;
for(;;) {
int x=S.top(); S.pop();
sccno[x]=scc_cnt;
if(x==u) break;
}
}
}
void find_scc(int n) {
memset(pre,,sizeof(pre));
memset(sccno,,sizeof(sccno));
scc_cnt=dfs_clock=;
for(int i=;i<n;i++)
if(!pre[i]) dfs(i);
} int T,n,m;
int val[maxn];
struct Edge{ int u,v,next; } e[maxm];
int en,front[maxm];
void AddEdge(int u,int v) {
en++; e[en].u=u,e[en].v=v; e[en].next=front[u],front[u]=en;
} int d[maxn];
int dp(int u) {
int& ans=d[u];
if(ans) return ans;
ans=;
for(int i=front[u];i>=;i=e[i].next) {
int v=e[i].v;
ans=max(ans,dp(v));
}
ans+=val[u];
return ans;
}
void init() {
en=-;
memset(front,-,sizeof(front));
memset(val,,sizeof(val));
memset(d,,sizeof(d));
for(int i=;i<=n;i++) G[i].clear();
}
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d%d",&n,&m);
init();
int u,v;
for(int i=;i<m;i++) {
scanf("%d%d",&u,&v);
u--,v--;
G[u].push_back(v);
}
find_scc(n);
for(int i=;i<n;i++) {
val[sccno[i]]++;
for(int j=;j<G[i].size();j++) {
int v=G[i][j];
if(sccno[i]!=sccno[v]) AddEdge(sccno[i],sccno[v]);
}
}
int ans=;
for(int i=;i<=scc_cnt;i++) ans=max(ans,dp(i));
printf("%d\n",ans);
}
return ;
}

ps:实测该题vector数组式存边较自写邻接表快

UVAlive11324 The Largest Clique(scc+dp)的更多相关文章

  1. UVA-11324 The Largest Clique (强连通+DP)

    题目大意:在一张无向图中,最大的节点集使得集合内任意两个节点都能到达对方. 题目分析:找出所有的强连通分量,将每一个分量视作大节点,则原图变成了一张DAG.将每个分量中的节点个数作为节点权值,题目便转 ...

  2. 【UVA11324】The Largest Clique (SCC)

    题意: 给一张有向图G,求一个结点数最大的结点集,使得该结点中任意两个结点 u 和 v满足:要么 u 可以到达 v, 要么 v 可以到达 u(u 和 v 相互可达也可以). 分析: Tarjan求SC ...

  3. bzoj 1093 [ZJOI2007]最大半连通子图(scc+DP)

    1093: [ZJOI2007]最大半连通子图 Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 2286  Solved: 897[Submit][St ...

  4. ACdreamOJ 1154 Lowbit Sum (数字dp)

    ACdreamOJ 1154 Lowbit Sum (数位dp) ACM 题目地址:pid=1154" target="_blank" style="color ...

  5. 「SDOI2016」储能表(数位dp)

    「SDOI2016」储能表(数位dp) 神仙数位 \(dp\) 系列 可能我做题做得少 \(QAQ\) \(f[i][0/1][0/1][0/1]\) 表示第 \(i\) 位 \(n\) 是否到达上界 ...

  6. 【HDU1693】Eat the Trees(插头dp)

    [HDU1693]Eat the Trees(插头dp) 题面 HDU Vjudge 大概就是网格图上有些点不能走,现在要找到若干条不相交的哈密顿回路使得所有格子都恰好被走过一遍. 题解 这题的弱化版 ...

  7. 【BZOJ1814】Ural 1519 Formula 1 (插头dp)

    [BZOJ1814]Ural 1519 Formula 1 (插头dp) 题面 BZOJ Vjudge 题解 戳这里 上面那个链接里面写的非常好啦. 然后说几个点吧. 首先是关于为什么只需要考虑三进制 ...

  8. 【BZOJ4712】洪水(动态dp)

    [BZOJ4712]洪水(动态dp) 题面 BZOJ 然而是权限题QwQ,所以粘过来算了. Description 小A走到一个山脚下,准备给自己造一个小屋.这时候,小A的朋友(op,又叫管理员)打开 ...

  9. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

随机推荐

  1. IOS 开发 【os x 使用常识】

    开始看<learn Objective-C on the Mac>这本书,很基础,准备快速看完. 刚接触mac 的 os x 系统,很不适应,介绍一点我刚学的基本常识. 1.os x 显示 ...

  2. asp.net,mvc4,mysql数据库,Ef遇到问题集合

    asp.net  mvc  mysql数据库,在我一个新手自学MVC4时遇到如下的问题,一一解决掉的方法记录如下方便自己日后查看,也为了方便一些像我一样的新手遇到如下问题时,提供参考 问题一: 解决办 ...

  3. php5.2通过saprfc扩展远程连接sap730成功案例

    公司刚上sap系统,由于资金有限,sap与其它系统的数据交换需要公司内部实现.于是,领导决定入库申请流程需要在sap与OA系统里实现电子签核流,重担果然落到我的身上.好在我只负责OA,还一位同事负责s ...

  4. js 去掉浏览器右击默认事件

    1.整个页面所有的右击事件 document.oncontextmenu = function(){ return false; } 2.特定的区域 document.getElementById(& ...

  5. XML约束

    XML约束--能够看懂约束内容,根据约束内容写出符合规则的xml文件. DTD约束 1)导入dtd方式 内部导入 <!DOCTYPE note [ <!ELEMENT note (to,f ...

  6. TalkingData游戏版本在Cocos2d-x 3.0使用

    Cocos2dx在3.0的版本中改动确实不少啊,所以导致原来可以在Cocos2.x版本上的demo都不能直接用,所以不得不重要写一个新的demo 但是TalkingData的库一直都是可以用的,只是之 ...

  7. Java学习----设计正真的应用程序

    import java.util.Scanner; // 输入10位学生的成绩,并且判断他们的成绩是哪个等级,其中90-100是A级,80-89是B级,70-79是C级,60-69是D级,60分以下E ...

  8. js性能优化--学习笔记

    <高性能网站建设进阶指南>: 1.使用局部变量,避免深入作用域查找,局部变量是读写速度最快的:把函数中使用次数超过一次的对象属性和数组存储为局部变量是一个好方法:比如for循环中的.len ...

  9. C# .net 如何根据访问者IP获取所在地区

    第一步:在根目录添加新项(类),新建一个类文件,把以下文件粘贴到该类文件下:   using System; using System.Collections.Generic; using Syste ...

  10. android异常之emulator-arm.exe已停止工作

    我遇到的这个问题通过降低了AVD的分辨率后解决了,估计是电脑的显卡不行.