LightOJ1417 Forwarding Emails(强连通分量+缩点+记忆化搜索)
题目大概是,每个人收到信息后会把信息发给他认识的一个人如此下去,问一开始要把信息发送给谁这样看到信息的人数最多。
- 首先找出图中的SCC并记录每个SCC里面的点数,如果传到一个SCC,那么里面的人都可以看到信息。
- 然后SCC缩点后就形成DAG,直接记忆化搜索,d(u)搜索从u点出发开始传最多能传多少人。
- 最后就是找答案了。
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- #define MAXN 55555
- #define MAXM 55555
- 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 size[MAXN],bn,belong[MAXN];
- int stack[MAXN],top;
- bool instack[MAXN];
- int dn,dfn[MAXN],low[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(dfn[u]==low[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=size[u],tmp=;
- for(int i=head[u]; i!=-; i=edge[i].next){
- int v=edge[i].v;
- tmp=max(tmp,dfs(v));
- }
- return d[u]=res+tmp;
- }
- int main(){
- int t,n,a,b;
- scanf("%d",&t);
- for(int cse=; cse<=t; ++cse){
- NE=;
- memset(head,-,sizeof(head));
- scanf("%d",&n);
- for(int i=; i<n; ++i){
- scanf("%d%d",&a,&b);
- addEdge(a,b);
- }
- top=bn=dn=;
- memset(instack,,sizeof(instack));
- memset(dfn,,sizeof(dfn));
- 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 mx=;
- for(int i=; i<=bn; ++i){
- mx=max(mx,dfs(i));
- }
- for(int i=; i<=n; ++i){
- if(d[belong[i]]==mx){
- printf("Case %d: %d\n",cse,i);
- break;
- }
- }
- }
- return ;
- }
LightOJ1417 Forwarding Emails(强连通分量+缩点+记忆化搜索)的更多相关文章
- BNU 20860——Forwarding Emails——————【强连通图缩点+记忆化搜索】
Forwarding Emails Time Limit: 1000ms Memory Limit: 131072KB This problem will be judged on UVA. Orig ...
- ZOJ3795 Grouping(强连通分量+缩点+记忆化搜索)
题目给一张有向图,要把点分组,问最少要几个组使得同组内的任意两点不连通. 首先考虑找出强连通分量缩点后形成DAG,强连通分量内的点肯定各自一组,两个强连通分量的拓扑序能确定的也得各自一组. 能在同一组 ...
- UVa11324 The Largest Clique(强连通分量+缩点+记忆化搜索)
题目给一张有向图G,要在其传递闭包T(G)上删除若干点,使得留下来的所有点具有单连通性,问最多能留下几个点. 其实这道题在T(G)上的连通性等同于在G上的连通性,所以考虑G就行了. 那么问题就简单了, ...
- [BZOJ1589] [Usaco2008 Dec]Trick or Treat on the Farm 采集糖果(tarjan缩点 + 记忆化搜索)
传送门 先用tarjan缩点,再记忆话搜索一下 #include <stack> #include <cstdio> #include <cstring> #inc ...
- UVA11324 The Largest Clique —— 强连通分量 + 缩点 + DP
题目链接:https://vjudge.net/problem/UVA-11324 题解: 题意:给出一张有向图,求一个结点数最大的结点集,使得任意两个结点u.v,要么u能到达v, 要么v能到达u(u ...
- POJ1236Network of Schools[强连通分量|缩点]
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16571 Accepted: 65 ...
- POJ1236Network of Schools(强连通分量 + 缩点)
题目链接Network of Schools 参考斌神博客 强连通分量缩点求入度为0的个数和出度为0的分量个数 题目大意:N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后 ...
- HD2767Proving Equivalences(有向图强连通分量+缩点)
题目链接 题意:有n个节点的图,现在给出了m个边,问最小加多少边是的图是强连通的 分析:首先找到强连通分量,然后把每一个强连通分量缩成一个点,然后就得到了一个DAG.接下来,设有a个节点(每个节点对应 ...
- POJ2553 The Bottom of a Graph(强连通分量+缩点)
题目是问,一个有向图有多少个点v满足∀w∈V:(v→w)⇒(w→v). 把图的强连通分量缩点,那么答案显然就是所有出度为0的点. 用Tarjan找强连通分量: #include<cstdio&g ...
随机推荐
- PowerDesigner15在win7-64位系统下对MySQL反向工程
由于机器是win64位的,下载的64的connector安装测试成功,但是在powerdesigner中测试连不上,总算在下面这边博友中找到解决方案! http://blog.csdn.net/web ...
- C#装箱和拆箱(值类型和引用类型之间的转换)
面向对象编程中,封箱指把非对象类型的数值或数据,包装成对象类型反之,拆箱指把对象类型拆成非对象的数值或数据. 例子:定义一个Circle 类 class Circle { double radius; ...
- 又一款linux提权辅助工具
又一款linux提权辅助工具 – Linux_Exploit_Suggester 2013-09-06 10:34 1455人阅读 评论(0) 收藏 举报 https://github.com/Pen ...
- coco2dx实现翻拍效果
昨天吃饭看见同事演示他做的翻牌效果,感觉不错,我心血来潮也来搞个,很简单直接上代码. class FlipCard : public CCNode { public: CREATE_FUNC(Flip ...
- Java for LeetCode 148 Sort List
Sort a linked list in O(n log n) time using constant space complexity. 解题思路: 归并排序.快速排序.堆排序都是O(n log ...
- 一台机器开2个Tomcat修改端口号
修改一个Tomcat端口号步骤:1.找到Tomcat目录下的conf文件夹2.进入conf文件夹里面找到server.xml文件3.打开server.xml文件4.在server.xml文件里面找到下 ...
- ubuntu修改文件访问权限
遇到“bash .....权限不够”的问题时, 从控制台进入到那个文件夹 chmod 777 * -R 全部子目录及文件权限改为 777
- July 20th, Week 30th Wednesday, 2016
Learn from yesterday, live for today, and hope for tomorrow. 借鉴昨天,活着当下,憧憬未来. Yesterday is the past, ...
- python基础——使用dict和set
python基础——使用dict和set dict Python内置了字典:dict的支持,dict全称dictionary,在其它语言中也称为map(映射),使用键-值(key-value)存储,具 ...
- ctrl + z fg bg
[root@bass ~]# jobs [1]+ Stopped vncviewer 192.168.1.17:5904 [root@bass ~]# #ctrl + z [root@bass ~]# ...