UVa11324 The Largest Clique(强连通分量+缩点+记忆化搜索)
2016-02-10 23:20
411 查看
题目给一张有向图G,要在其传递闭包T(G)上删除若干点,使得留下来的所有点具有单连通性,问最多能留下几个点。
其实这道题在T(G)上的连通性等同于在G上的连通性,所以考虑G就行了。
那么问题就简单了,强连通分量缩点,强连通分量必定要一起留下,从入度0到出度0的强连通分量找到一条包含最多点的通路即可。
其实这道题在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]=1; for(int i=head[u]; i!=-1; i=edge[i].next){ int v=edge[i].v; if(dfn[v]==0){ 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]=0; belong[v]=bn; ++size[bn]; }while(u!=v); } } int d[MAXN]; int dfs(int u){ if(d[u]) return d[u]; int res=0; for(int i=head[u]; i!=-1; 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=0; memset(head,-1,sizeof(head)); while(m--){ scanf("%d%d",&a,&b); addEdge(a,b); } top=dn=bn=0; memset(dfn,0,sizeof(dfn)); memset(instack,0,sizeof(instack)); memset(size,0,sizeof(size)); for(int i=1; i<=n; ++i){ if(dfn[i]==0) tarjan(i); } int tmp=NE; NE=0; memset(head,-1,sizeof(head)); for(int i=0; i<tmp; ++i){ int u=belong[edge[i].u],v=belong[edge[i].v]; if(u==v) continue; addEdge(u,v); } memset(d,0,sizeof(d)); int res=0; for(int i=1; i<=bn; ++i){ res=max(res,dfs(i)); } printf("%d\n",res); } return 0; }
相关文章推荐
- System.FormatException: GUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。
- 597C. Subsequences【DP】【树状数组】
- viewutils fragment invalid value for field
- 1007. Maximum Subsequence Sum (25)
- 当phantomJS遇上Requests
- 优先级队列——PriorityQueue
- Android开发学习之路--UI之ListView
- Android开发学习之路--UI之ListView
- Version 1.6.0_65 of the JVM is not suitable for this product
- Codeforces Round #342 (Div. 2)-A. Guest From the Past(数学)
- 利用DelayQueue实现延时消息队列(简易版MQ)
- 前端笔记十二,表格、列表相关属性及media query
- Cobbler Quickstart Guide
- java concurrent之BlockingQueue
- UIButton 字体居左
- Maven异常:Dynamic Web Module 3.0 requires Java 1.6 or newer.
- Visual Studio(vs)2012安装插件Indent Guides
- Web应用集成攻击平台Burpsuite的使用
- myeclispe启动后报错 Subclipse talks to Subversion via a Java API that requires access to native libraries.
- IoCompleteRequest routine