ccc 2016 s3

原创 2016年08月30日 23:24:45
/* 
把选中的点和它们的lca标记一下,然后考虑标记的点组成的这棵树。答案是:路径长度和 * 2 - 直径
想办法把选中的点和连接它们的点和边弄出来重新建棵树
以一个选中的点作为根,然后dfs,对每一个非选中的点,根据子树是否有选中的点来决定它是否要选
复杂度为 O(n)
*/ 
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;

int n, m;
const int maxn = 100000 + 5;
vector<int> g[maxn];
bool node[maxn], vis[maxn];

bool dfs(int i) {
	vis[i] = true;
	for (int k = 0; k < g[i].size(); k++) {
		int t = g[i][k]; 
		if (!vis[t] && dfs(t)) {
			node[i] = true;
		}
	}
	return node[i];
}

int dist(int i) {
	vis[i] = true;
	int temp = 0;
	for (int k = 0; k < g[i].size(); k ++ ) {
		int t = g[i][k];
		if (!vis[t] && node[t]) {
			temp += dist(t) + 1;
		}
	}
	return temp;
}

struct p {
	int num, dis;
	p(int aa, int bb) : num(aa), dis(bb) {}
};

int diameter(int i) {
	queue<int> q;
	q.push(i);
	vis[i] = true;
	int last;
	while (!q.empty()) {
		int k = q.front(); q.pop(); last = k;
		for (int w = 0; w < g[k].size(); w++) {
			int c_node = g[k][w];
			if (!vis[c_node] && node[c_node]) {
				q.push(c_node); vis[c_node] = true;
			}
		}
	}
	memset(vis, false, sizeof(vis));
	queue<p> Q;
	Q.push(p(last, 0)); vis[last] = true;
	int ans = 0;
	while (!Q.empty()) {
		p k = Q.front(); Q.pop(); ans = k.dis;
		for (int w = 0; w < g[k.num].size(); w++) {
			int c_node = g[k.num][w];
			if (!vis[c_node] && node[c_node]) {
				Q.push(p(c_node, k.dis + 1)); vis[c_node] = true;
			}
		}
	}
	return ans;
}

void solve() {
	memset(vis, false, sizeof(vis));
	int i;
	for (i = 0; i < n; i ++ ) if (node[i]) break;
	dfs(i);
	
	memset(vis, false, sizeof(vis));
	int d1 = dist(i);
	
	memset(vis, false, sizeof(vis));
	int d2 = diameter(i);
	
	printf("%d\n", 2 * d1 - d2);
}

void init() {
	memset(node, false, sizeof(node));
	scanf("%d%d", &n, &m);
	for (int i = 0; i < m; i ++ ) {
		int a; scanf("%d", &a); node[a] = true;
	}
	for (int i = 0; i < n; i ++ ) g[i].clear();
	for (int i = 1; i <= n - 1; i++) {
		int a, b; scanf("%d%d", &a, &b);
		g[a].push_back(b); g[b].push_back(a);
	}
}

int main() {
	init(); solve();
	return 0;
} 

ccc 2016 s4

#include #include #include using namespace std; const int maxn = 400 + 5; int n; int a[maxn]; in...
  • alancodes
  • alancodes
  • 2016年08月30日 23:11
  • 77

Ccc

  • yayaleon801030
  • yayaleon801030
  • 2008年07月15日 14:33
  • 73

ccc 2016 s4 Combining Riceballs

Problem Description Alphonse has N rice balls of various sizes in a row. He wants to form the large...
  • alancodes
  • alancodes
  • 2016年08月30日 23:07
  • 85

CDE前台组件CCC的介绍

在使用CDE的时候大家对CDE的各个图形的设置是不是有点范难了,主要是不知道怎么下手今天就给大家分享一些这方面的参考资料.        首先需要了解的是CDE(Community Dashboar...
  • zhaizhisheng
  • zhaizhisheng
  • 2015年04月30日 13:47
  • 1025

ccc

cplusplus 
  • PowerFire
  • PowerFire
  • 2007年06月26日 23:52
  • 348

Amazon S3和Swift鉴权机制分析

基于Base64编码的HTTP Basic Authentication由于安全问题,已经不再广泛使用了。在云存储中,数据的安全性一直被广泛关注。亚马逊的AWS S3和Openstack Swift分...
  • sinat_27186785
  • sinat_27186785
  • 2016年07月28日 23:54
  • 1758

CCC

fsfdgfsdg
  • sharennsz
  • sharennsz
  • 2008年06月25日 10:19
  • 116

AWS S3 API实现文件上传下载

近日项目需要使用AWS S3的API实现文件的上传和下载功能,才发现网上关于.net实现该功能的文章不多,有几篇也都是很老版本的AWS的使用描述了,写法和封装的类等等都基本上报废了。虽然这样,但还是很...
  • marvin198801
  • marvin198801
  • 2015年08月14日 16:35
  • 18322

S3服务(Simple Storage Service简单存储服务)简介

亚马逊云存储之S3(Simple Storage Service简单存储服务) 旧文 2010-05-10 S3是Simple Storage Service的缩写,即简单存储服务。亚...
  • wangqi0079
  • wangqi0079
  • 2013年02月16日 11:10
  • 11123

亚马逊AWS之S3与EBS的区别

本文转载自http://blog.heontheroad.com/archives/5.html Amazon Elastic Block Store (EBS)与Amazon ...
  • jiaomicha
  • jiaomicha
  • 2013年12月30日 16:26
  • 6613
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ccc 2016 s3
举报原因:
原因补充:

(最多只允许输入30个字)