强连通 HDU 3639
t个样例
n个点 m条边
求有手帕最多的人
A->B B->C
C 2块 可以传递
先强联通一下 这里的权是强连通分量中有几个点
然后要建一下反图 入度为0的点就有可能是最大的点
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<stack> using namespace std; #define MAXN 5010
#define MAXN1 30010 int head[MAXN],dfn[MAXN],low[MAXN],pa[MAXN],cou[MAXN],in[MAXN],ans[MAXN],s1[MAXN];
bool vis[MAXN];
int k,num,cnt; struct edg
{
int next,to,fr;
}x[MAXN1]; void add(int u,int v)
{
x[cnt].next=head[u];
x[cnt].fr=u;
x[cnt].to=v;
head[u]=cnt++;
}
stack<int>s; void dfs(int u)
{
dfn[u]=low[u]=k++;
vis[u]=;
s.push(u);
int i;
for(i=head[u];i!=-;i=x[i].next)
{
int t=x[i].to;
if(!dfn[t])
{
dfs(t);
low[u]=min(low[u],low[t]);
}
else if(vis[t])
low[u]=min(low[u],dfn[t]);
}
if(dfn[u]==low[u])
{
num++;
while(!s.empty())
{
int now=s.top();
s.pop();
pa[now]=num;
vis[now]=;
cou[num]++;
if(now==u)break;
}
}
}
int sum;
void dfs1(int u)
{
vis[u]=;
int i;
sum=sum+cou[u];
for(i=head[u];i!=-;i=x[i].next)
{
if(!vis[x[i].to])
dfs1(x[i].to);
}
}
int main()
{
int t,ca;
scanf("%d",&t);
ca=; while(t--)
{
int n,m,i;
scanf("%d%d",&n,&m);
memset(head,-,sizeof(head));
cnt=;
for(i=;i<=m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
}
num=;
k=;
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(vis,,sizeof(vis));
memset(pa ,,sizeof(pa));
memset(cou,,sizeof(cou));
memset(in, ,sizeof(in));
memset(ans,,sizeof(ans)); for(i=;i<n;i++)
if(!dfn[i])
dfs(i);
int en=cnt;
memset(head,-,sizeof(head));
cnt=;
for(i=;i<en;i++)
{
int u,v;
u=pa[x[i].fr];
v=pa[x[i].to];
if(u!=v)
{
add(v,u);
in[u]++;
}
}
int m1=-;
for(i=;i<=num;i++)
{
if(in[i]==)
{
sum=;
memset(vis,,sizeof(vis));
dfs1(i);
ans[i]=sum;
if(sum>m1)
m1=sum;
}
}
printf("Case %d: %d\n",ca++,m1-);
int c1=; for(i=;i<n;i++)
{
if(ans[pa[i]]==m1)
{
s1[c1++]=i;
}
}
for(i=;i<c1-;i++)
printf("%d ",s1[i]);
printf("%d\n",s1[i]);
} return ;
}
强连通 HDU 3639的更多相关文章
- HDU 3639 Hawk-and-Chicken(强连通分量+缩点)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013480600/article/details/32140501 HDU 3639 Hawk-a ...
- HDU 3639 Hawk-and-Chicken(良好的沟通)
HDU 3639 Hawk-and-Chicken 题目链接 题意:就是在一个有向图上,满足传递关系,比方a->b, b->c,那么c能够得到2的支持,问得到支持最大的是谁,而且输出这些人 ...
- HDU 3639 Hawk-and-Chicken(强连通缩点+反向建图)
http://acm.hdu.edu.cn/showproblem.php?pid=3639 题意: 有一群孩子正在玩老鹰抓小鸡,由于想当老鹰的人不少,孩子们通过投票的方式产生,但是投票有这么一条规则 ...
- HDU 3639 Hawk-and-Chicken (强连通缩点+DFS)
<题目链接> 题目大意: 有一群孩子正在玩老鹰抓小鸡,由于想当老鹰的人不少,孩子们通过投票的方式产生,但是投票有这么一条规则:投票具有传递性,A支持B,B支持C,那么C获得2票(A.B共两 ...
- HDU 3639 Hawk-and-Chicken
Hawk-and-Chicken Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 强连通 HDU 1827
n个点m条边 n个权lcy 要叫这个人的花费 m条边 缩点后 新的图中 入度为0的点要通知 通知强连通分量中权值最小的 #include<stdio.h> #include<alg ...
- 强连通 HDU 1269
n点m边 求是否能从任意a->b b->a 强连通分量等于1 #include<stdio.h> #include<algorithm> #include<s ...
- HDU 3639 Bone Collector II(01背包第K优解)
Bone Collector II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 强连通 HDU 3861
t个样例 n个点m条边 分成一些区 2个点互相能到达必须分在一个区 一个区中任何2个点可以u->v 或者v->u 任何点都要有自己的区 求最小的区的数目 强联通缩点 成新图 二分匹配 求最 ...
随机推荐
- 北理工c语言单项选择题
1.在函数中,只要说明了变量,就可为其分配存储单元 error:如auto和register类型的变量在定义它的函数被调用时才被分配存储单元 auto:默认的局部变量存储方式,(这种变量定义时在动态存 ...
- NOIP2009pj道路游戏[环形DP 转移优化 二维信息]
题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 n 个机器人工厂编 ...
- ADO.NET防止字符串攻击方法
在黑窗口里面输入内容时利用拼接语句可以对数据进行攻击 如:输入班级值 --:代表后边内容都被注释掉了 防止SQL注入攻击方法: 再给命令发送SQL语句的时候分两次发送,把SQL语句拆成两块,用户输入的 ...
- uva131 The Psychic Poker Player
The Psychic Poker Player Time Limit: 3000MS 64bit IO Format: %lld & %llu Description In 5-ca ...
- NPM 如何升级?
- 完整部署CentOS7.2+OpenStack+kvm 云平台环境(6)--在线调整虚拟机的大小
前面提到过openstack环境部署及创建虚拟机的完整过程,然后有时候会发现创建的虚拟机规格太小,满足不了业务需求:亦或是虚拟机规格太大,容易造成资源浪费.于是就有了在线拉伸虚拟机规格的需求.所以,今 ...
- Java命令行的执行参数
Java 程序命令行参数说明 启动Java程序的方式有两种: # starts a Java virtual machine, loads the specified class, and invok ...
- SQL2012删除作业失败的处理
修改msdb数据库中的过程sp_delete_job,如下: USE [msdb] GO /****** Object: StoredProcedure [dbo].[sp_delete_job] S ...
- C++ 中dynamic_cast<>的使用方法小结 -判断类型-rtti
将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理 即会作一定的判断. 对指针进行dynamic ...
- rpc框架: thrift/avro/protobuf 之maven插件生成java类
thrift.avro.probobuf 这几个rpc框架的基本思想都差不多,先定义IDL文件,然后由各自的编译器(或maven插件)生成目标语言的源代码,但是,根据idl生成源代码这件事,如果每次都 ...