题意:

有一些战士,他们有战斗力和讨厌的人,选择一些战士,使他们互不讨厌,且战斗力最大,范围1e6

分析:

把战士看作点,讨厌的关系看作一条边,连出来的是一个基环树森林。

对于一棵基环树,我们找出环,选择环上一条边(u,v)。

那么只需考虑两种情况:1、u不选,v任意;2、v不选,u任意。答案取max累计即可

程序:

 #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream> using namespace std; #define REP(i, a, b) for (int i = (a), i##_end_ = (b); i <= i##_end_; ++i)
#define mset(a, b) memset(a, b, sizeof(a))
#define max_(a, b) a > b ? a : b
const int maxn = 1e6+;
typedef long long LL;
int n;
struct Edge
{
int v, nxt;
Edge (int v = , int nxt = ):
v(v), nxt(nxt) {}
}e[maxn*];
int head[maxn], label;
int U, V, E, w[maxn];
bool vis[maxn];
LL f[maxn][]; template <class TAT>
void Ckmax(TAT &a, const TAT &b)
{
if (a < b) a = b;
} void ins(int u, int v)
{
e[++label] = Edge(v, head[u]), head[u] = label;
e[++label] = Edge(u, head[v]), head[v] = label;
} void dfs(int u, int fa)
{
for (int i = head[u]; i != -; i = e[i].nxt)
{
int v = e[i].v;
if (v == fa) continue ;
if (vis[v])
{
U = u, V = v, E = i;
continue ;
}
vis[v] = true;
dfs(v, u);
}
} void work(int u, int fa, int ban)
{
f[u][] = , f[u][] = w[u];
for (int i = head[u]; i != -; i = e[i].nxt)
{
int v = e[i].v;
if (v == fa || i == ban || i == (ban^)) continue ;
work(v, u, ban);
f[u][] += max_(f[v][], f[v][]);
f[u][] += f[v][];
}
} int main()
{
scanf("%d", &n);
REP(i, , n) head[i] = -;
label = -;
REP(i, , n)
{
int v;
scanf("%d %d", &w[i], &v);
ins(i, v);
}
mset(vis, ), mset(f, );
LL ans = ;
REP(i, , n)
if (!vis[i])
{
vis[i] = true, dfs(i, );
LL temp;
work(U, , E);
temp = f[U][];
work(V, , E);
Ckmax(temp, f[V][]);
ans += temp;
}
printf("%lld\n", ans);
return ;
}

最新文章

  1. 【工业串口和网络软件通讯平台(SuperIO)教程】二.架构和组成部分
  2. matlab basic operation command
  3. PDF 补丁丁 0.5.0.2713 发布(替换字库功能修正字符宽度问题)
  4. 安利eclipse插件之log4E
  5. 验证码识别--type7
  6. 传递给系统调用的数据区域太小。 (异常来自 HRESULT:0x8007007A)
  7. oracle的基本查询~上
  8. BestCoder Round #73 (div.2)(hdu 5630)
  9. 如何从零开始学习DIV+CSS
  10. spring boot 2.0.0由于版本不匹配导致的NoSuchMethodError问题解析
  11. P2520 [HAOI2011]向量
  12. Java Servlet 2.5 设置 cookie httponly
  13. linux服务器 jboss-7安装
  14. spring源码解析1--spring整体架构
  15. (转)HTTPS到底是个啥玩意儿?
  16. 【C/C++】泛型栈
  17. 廉价的SUP掌机拆解
  18. Docker简介及Linux下安装
  19. day11-mysql中的mysql数据库不见了
  20. 关于echarts堆叠图标问题 ,某条数数不需要堆叠的处理

热门文章

  1. Linux 官方镜像源汇总
  2. notepad++突然崩溃,保存的文件没了怎么办
  3. es6新语法Object.assign()
  4. queue_delayed_work和queue_work区别 (转http://blog.csdn.net/dosculler/article/details/7968101)
  5. mysqldump 逻辑备份的正确方法【转】
  6. [How to] MapReduce on HBase ----- 简单二级索引的实现
  7. CGIC函数说明
  8. C语言再学习之 setjmp与longjmp
  9. leetcode 之Remove Duplicates from Sorted Array(1)
  10. Zabbix定义报警机制