ZOJ3795_Grouping
告诉你某些人的年龄大小关系,问你把所有的人分成若干个组,最少需要多少组,使得组内任意两个人的年龄不可比。
首先考虑特殊情况,如果所有年龄关系构成了一个环,那么这个环中所有人的年龄都是相等,也就是可比的。
同时所有其他的与这个环中任意一个点相连的任意一个环或者点都是可比的。
如果两个点或者环,无法处在同一条路径上,那么这两个点和环就是不可比的。
于是算法就出来了。
对于每一个强连通分量,我们将其缩为一个点,点权为这个连通分量中的点数。这样就相当于我们找一条权值最大的路径就好了。
由于缩点后一定是一个有向无环图,那么可以通过dp或者记忆化搜索解决问题。
召唤代码君:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#define maxn 600600
using namespace std; vector<int> V[maxn];
int to[maxn],next[maxn],first[maxn],edge;
int d[maxn],f[maxn],low[maxn],belong[maxn],ans;
int stack[maxn],top;
int n,m,sccnum,dfs_clock; void _init()
{
edge=ans=;
top=sccnum=;
memset(first,-,sizeof(int)*(n+));
memset(d,,sizeof(int)*(n+));
memset(belong,,sizeof(int)*(n+));
} void addedge(int U,int V)
{
if (U==V) return;
to[edge]=V,next[edge]=first[U],first[U]=edge++;
} void dfs(int cur)
{
d[cur]=low[cur]=++dfs_clock;
stack[++top]=cur;
for (int i=first[cur]; i!=-; i=next[i])
if (!d[to[i]]){
dfs(to[i]);
low[cur]=min(low[cur],low[to[i]]);
}
else if (!belong[to[i]]) low[cur]=min(low[cur],d[to[i]]);
if (low[cur]==d[cur]){
V[++sccnum].clear();
f[sccnum]=;
for (;;){
int x=stack[top--];
belong[x]=sccnum;
f[sccnum]++;
if (x==cur) break;
}
}
} int get(int x)
{
if (d[x]!=-) return d[x];
d[x]=;
for (unsigned i=; i<V[x].size(); i++)
d[x]=max(get(V[x][i]),d[x]);
return d[x]=d[x]+f[x];
} int main()
{
int UU,VV;
while (scanf("%d%d",&n,&m)!=EOF){
_init();
while (m--){
scanf("%d%d",&UU,&VV);
addedge(UU,VV);
}
for (int i=; i<=n; i++)
if (!d[i]) dfs(i);
for (int i=; i<=n; i++)
for (int j=first[i]; j!=-; j=next[j])
if (belong[i]!=belong[to[j]])
V[belong[i]].push_back(belong[to[j]]);
memset(d,-,sizeof(int)*(sccnum+));
for (int i=; i<=sccnum; i++)
ans=max(ans,get(i));
printf("%d\n",ans);
}
return ;
}
ZOJ3795_Grouping的更多相关文章
随机推荐
- 【英语魔法俱乐部——读书笔记】 3 高级句型-简化从句&倒装句(Reduced Clauses、Inverted Sentences) 【完结】
[英语魔法俱乐部——读书笔记] 3 高级句型-简化从句&倒装句(Reduced Clauses.Inverted Sentences):(3.1)从属从句简化的通则.(3.2)形容词从句简化. ...
- Exhange上添加IMAP4
1.登录到Exchange admim Center,选择servers,双击servers名称,选择IMAP4 2.服务器上查看任务管理器中的服务器,找到exchange imap4两个服务器是否开 ...
- HTML5新增标签(新增27个标签,废弃16个标签)
1>结构性标签:负责web上下文结构的定义 article:文章主题内容 header:标记头部区域内容 footer:标记脚部区域内容 section:区域章节表述 nav:菜单导航,链接导航 ...
- mysql 允许远程访问
原来装mysql数据库的时候就想,这个只要在本地访问就可以了,没有必要让远程访问.可是,今天想把数据放到远程的机器上,却发现,不是简单的将sql语句(指导出的语句)执行一遍就行了,对于那些自增的字段, ...
- Rethrowing exceptions and preserving the full call stack trace
refer:http://weblogs.asp.net/fmarguerie/archive/2008/01/02/rethrowing-exceptions-and-preserving-the- ...
- C89和C99区别--简单总结
(1)对数组的增强 可变长数组 C99中,程序员声明数组时,数组的维数可以由任一有效的整型表达式确定,包括只在运行时才能确定其值的表达式,这类数组就叫做可变长数组,但是只有局部数组才可以是变长的.可变 ...
- mysql 常用基础
登录命令 -h远程IP地址 -u用户名 -p密码 -P端口 mysql -h127.0.0.1 -uroot -p21313 -P3306 新建用户 insert into mysql.user(Ho ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
- centos6.4安装Apache+MySQL+PHP
一.安装 MySQL 首先来进行 MySQL 的安装.打开超级终端,输入: [root@localhost ~]# yum install mysql mysql-server 安装完毕,让 MySQ ...
- JavaScript 随笔1
第一章 JavaScript实现 JavaScript由三个不同部分组成: ECMAScript,提供核心语言功能 DOM,提供访问和操作网页内容的方法和接口 BOM,提供与浏览器交互的方法和接口. ...