UESTC_邱老师的脑残粉 2015 UESTC Training for Graph Theory<Problem D>
D - 邱老师的脑残粉
Time Limit: 12000/4000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
邱老师的粉丝众多,每天邱老师都得面对粉丝们数不尽的邀约,邱老师一个人处理不过来,所以想请你帮忙。
假设某天有N个粉丝想和邱老师约,一旦某个粉丝成功地约上了邱老师,她就会发微博和朋友炫耀。一旦某个粉丝发现微博里有关于邱老师的消息,她都会转发。
如果当天内某个约上邱老师的粉丝发现微博里有其他粉丝和邱老师约会的消息,她就会很难堪,邱老师也会很难堪(显得邱老师不够专一)。为了避免这种尴尬的情况发生,邱老师每天只能从N个粉丝里选择一部分应约。
但是邱老师为了满足更多粉丝的愿望,邱老师能够从约会的粉丝中至多选择两名粉丝,迷惑她(们)当天停止使用微博(既不查看消息,也不转发消息),这样子能和邱老师约会的粉丝好像又变多了。但是选择哪两名粉丝才能使得能和邱老师约会的粉丝的数量达到最大?
Input
第一行两个整数N,M,表示当天有N个粉丝想和邱老师约会以及粉丝之间有M条关系。(1≤N,M≤5000)
接下来M行,每行表示两个数u,v表示第u个粉丝和第v个粉丝的微博是相互关注的。(1≤u,v≤N)
(相互关注指的是:u发的消息v都能看到,v发的消息u都能看到)
数据保证没有重边和自环
Output
输出邱老师当天最多能和多少个粉丝约会。
Sample input and output
| Sample Input | Sample Output |
|---|---|
5 4 |
5 |
Hint
样例中,如果不迷惑粉丝的话,邱老师当天只能和1个粉丝约会(比如和2号粉丝约会),因为2号粉丝会发微博炫耀,1号粉丝看到后会转发,这样3号粉丝和4号粉丝看到1号的转发也会转发,这样5号粉丝也从4号粉丝那里看到了2号发的微博。
但是如果邱老师迷惑1号粉丝和4号粉丝让她俩当天停止使用微博的话,邱老师当天就能和5个粉丝约会辣!
解题报告:
本题的数据很水,本题的数据很水,本题的数据很水,重要的事情说三遍,各位可以尝试二次直接贪,可2ms左右过
本题是一道tarjan算法题目.
首先我们第一个点需要枚举,why?考虑下面这种情况:

这个图既是边双连通,又是点双连通,第一个取的点程序是无法判断哪个更优的.
所以我们第一个点采用枚举的形式.
那么第二个点呢?
注意到第二个点之后我们并不能继续操作,所以第二点的选取我们用贪心.
这样,算法框架就出来了:
- 枚举每个可能的第一个点
- 对切割这个点后的图跑tarjan,这里我采用的是割桥,若u – v是割桥,则val[u] ++ , val[v] ++
- 我们去掉val值最大的点,然后跑一次连通分量,并更新答案
复杂度: O ( n * ( n + m ) * 2 )
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#define pb push_back
using namespace std;
const int maxn = 5e3 + ;
vector<int>E[maxn];
int n,m,T,new_time[maxn],low[maxn];
int is_cut[maxn] , cut_vertx1 , cut_vertx2 , ans = ,ptr;
bool vis[maxn]; //染色集合 int tarjan_dfs(int cur,int pre)
{
new_time[cur] = low[cur] = T++;
for(int i = ; i < E[cur].size() ; ++ i)
{
int nextnode = E[cur][i];
if (nextnode == cut_vertx1) continue; //枚举的第一次去掉的点
ptr = cur;
if (!new_time[nextnode]) //树边
{
int lowv = tarjan_dfs(nextnode,cur);
if (lowv > new_time[cur])
{
is_cut[cur] ++ , is_cut[nextnode] ++ ;
}
low[cur] = min(low[cur],lowv);
}
else if (new_time[nextnode] < new_time[cur] && nextnode != pre) //反向边
low[cur] = min(low[cur],new_time[nextnode]);
}
return low[cur];
} void colour_map(int cur)
{
vis[cur] = true;
for(int i = ; i < E[cur].size() ; ++ i)
{
int nextnode = E[cur][i];
if (!vis[nextnode] && nextnode != cut_vertx1 && nextnode != cut_vertx2)
colour_map(nextnode);
}
} void updata_ans(int x,int y)
{
cut_vertx1 = x , cut_vertx2 = y;
int tot = ;
memset(vis,false,sizeof(vis));
for(int i = ; i <= n ; ++ i)
if (!vis[i])
{
if (i != cut_vertx1 && i != cut_vertx2)
colour_map(i);
tot++;
}
ans = max(ans,tot);
} void slove()
{
for(int tt = ; tt <= n ; ++ tt)
{
cut_vertx1 = tt;
memset(is_cut,,sizeof(is_cut));
memset(new_time,,sizeof(new_time));
T = ;
if (tt == )
ptr = ;
else
ptr = ;
for(int i = ; i <= n ; ++ i)
if (!new_time[i] && i != cut_vertx1)
tarjan_dfs(i,);
int maxlen = ;
for(int i = ; i <= n ; ++ i)
if (is_cut[i] >= maxlen)
{
maxlen = is_cut[i];
ptr = i;
}
updata_ans(tt,ptr);
}
} int main(int argc,char *argv[])
{
scanf("%d%d",&n,&m);
for(int i = ; i <= m ; ++ i)
{
int u,v;
scanf("%d%d",&u,&v);
E[u].pb(v) , E[v].pb(u);
}
slove();
printf("%d\n",ans);
return ;
}
UESTC_邱老师的脑残粉 2015 UESTC Training for Graph Theory<Problem D>的更多相关文章
- UESTC_方老师和农场 2015 UESTC Training for Graph Theory<Problem L>
L - 方老师和农场 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_邱老师选妹子 2015 UESTC Training for Dynamic Programming<Problem H>
H - 邱老师选妹子 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_邱老师玩游戏 2015 UESTC Training for Dynamic Programming<Problem G>
G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_邱老师看电影 2015 UESTC Training for Dynamic Programming<Problem F>
F - 邱老师看电影 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_小panpan学图论 2015 UESTC Training for Graph Theory<Problem J>
J - 小panpan学图论 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) S ...
- UESTC_韩爷的情书 2015 UESTC Training for Graph Theory<Problem H>
H - 韩爷的情书 Time Limit: 6000/2000MS (Java/Others) Memory Limit: 262144/262144KB (Java/Others) Subm ...
- UESTC_秋实大哥带我飞 2015 UESTC Training for Graph Theory<Problem B>
B - 秋实大哥带我飞 Time Limit: 300/100MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- UESTC_邱老师降临小行星 2015 UESTC Training for Search Algorithm & String<Problem B>
B - 邱老师降临小行星 Time Limit: 10000/5000MS (Java/Others) Memory Limit: 65536/65535KB (Java/Others) Su ...
- UESTC_王之盛宴 2015 UESTC Training for Graph Theory<Problem K>
K - 王之盛宴 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
随机推荐
- Axure 原型设计工具画业务流程图
加入人人都是产品经理[起点学院]产品经理实战训练营,BAT产品总监手把手带你学产品点此查看详情! 软件行业从业6年,流程图看过太多,大部分流程图是在考验阅读者的理解能力,近期在设计公司新版APP,对流 ...
- jsp中全局变量和局部变量的设置
- 再造轮子之网易彩票-第一季(IOS 篇 by sixleaves)
前言 在网上看了别人做的模仿网易彩票的项目, 于是也跟着用自己的想法做了一篇.写这篇博客的目的, 在于UI综合的一次小练习, 同时总结和串联其各个控件之间的应用.封装思想等.考虑到有人上不了githu ...
- IO之内核buffer----"buffer cache"
举例 一般情况下,Read,write系统调用并不直接访问磁盘.这两个系统调用仅仅是在用户空间和内核空间的buffer之间传递目标数据. 举个例子,下面的write系统调用仅仅是把3个字节从用户空间拷 ...
- 【转】Linux下编译ffmpeg
1.下载ffmpeg.下载网址:http://www.ffmpeg.org/download.html 2.解压缩tar -zxvf ffmpeg-2.0.1.tar.gz 3.配置,生成Makefi ...
- ListView之ArrayAdapter
ArrayAdapter 普通的显示listView子项,安卓的内置对象 使用方法: /* ListView :列表 通常有两个职责: a.将数据填充到布局 b.处理点击事件 一个ListView创建 ...
- Test注解的两个属性:expected和timeout
JUnit4:Test文档中的解释: The Test annotation supports two optional parameters. The first, expected, declar ...
- UVA247- Calling Circles(有向图的强连通分量)
题目链接 题意: 给定一张有向图.找出全部强连通分量,并输出. 思路:有向图的强连通分量用Tarjan算法,然后用map映射,便于输出,注意输出格式. 代码: #include <iostrea ...
- Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)
Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...
- Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6629298 在前面一篇文章浅谈Android系 ...