【CF】328 D. Super M
这种图论题已经变得简单了。。。
/* D */
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 const int maxn = ;
vi vc[maxn], vc2[maxn];
bool visit[maxn];
bool mark[maxn];
int markp[maxn], pre[maxn];
int mx[maxn], mx_[maxn];
int n, m, length = ;
int mn = INT_MAX, ans = INT_MAX; void bfs(int s) {
queue<int> Q;
int u, v, sz; Q.push(s);
visit[s] = true;
pre[s] = ; while (!Q.empty()) {
u = Q.front();
Q.pop();
sz = SZ(vc[u]);
rep(i, , sz) {
v = vc[u][i];
if (!visit[v]) {
visit[v] = true;
pre[v] = u;
Q.push(v);
}
}
}
} void dfs3(int v) {
if (visit[v])
return; visit[v] = true;
int u = pre[v]; length += ;
vc2[u].pb(v);
vc2[v].pb(u);
if (u)
dfs3(u);
} void dfs(int u, int fa) {
int v, sz = SZ(vc2[u]); mx[u] = mx_[u] = ;
rep(i, , sz) {
v = vc2[u][i];
if (v == fa)
continue; dfs(v, u);
if (mx[v]+ > mx[u]) {
mx_[u] = mx[u];
mx[u] = mx[v] + ;
} else if (mx[v]+ > mx_[u]) {
mx_[u] = mx[v]+;
}
} #ifndef ONLINE_JUDGE
printf("u = %d, mx[u] = %d, mx_[u] = %d\n", u, mx[u], mx_[u]);
#endif
} void dfs2(int u, int fa, int pmx) {
int v, sz = SZ(vc2[u]);
int cmx = max(mx[u], pmx), tmp; if (length-cmx < mn) {
mn = length - cmx;
ans = u;
} else if (length-cmx==mn && u<ans) {
ans = u;
} rep(i, , sz) {
v = vc2[u][i];
if (v == fa)
continue; if (mx[v]+ == mx[u]) {
tmp = max(pmx, mx_[u])+;
} else {
tmp = max(pmx, mx[u])+;
} dfs2(v, u, tmp);
}
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int u, v, x; scanf("%d %d", &n, &m);
rep(i, , n) {
scanf("%d %d", &u, &v);
vc[u].pb(v);
vc[v].pb(u);
} rep(i, , m) {
scanf("%d", &x);
markp[i] = x;
mark[x] = true;
} bfs(x);
memset(visit, false, sizeof(visit));
visit[x] = true;
rep(i, , m)
dfs3(markp[i]);
dfs(x, );
dfs2(x, , ); printf("%d\n%d\n", ans, mn); #ifndef ONLINE_JUDGE
printf("time = %d.\n", (int)clock());
#endif return ;
}
【CF】328 D. Super M的更多相关文章
- 【转】Java中super和this的几种用法与区别
1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位. class Base { Base() { System.out.println("Base&qu ...
- 【python】class之super关键字的作用
在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(self): prin ...
- 【转】python 调用super()初始化报错“TypeError: super() takes at least 1 argument”
一.实验环境 1.Windows7x64_SP1 2.Anaconda2.5.0 + python2.7(anaconda集成,不需单独安装) 二.实验步骤 2.1 在python中有如下代码: cl ...
- 【CF】438E. The Child and Binary Tree
http://codeforces.com/contest/438/problem/E 题意:询问每个点权值在 $c_1, c_2, ..., c_m$ 中,总权值和为 $s$ 的二叉树个数.请给出每 ...
- 【CF】148D Bag of mice
http://codeforces.com/problemset/problem/148/D 题意:w个白b个黑,公主和龙轮流取,公主先取,等概率取到一个.当龙取完后,会等概率跳出一只.(0<= ...
- 【CF】323 Div2. D. Once Again...
挺有意思的一道题目.考虑长度为n的数组,重复n次,可以得到n*n的最长上升子序列.同理,也可以得到n*n的最长下降子序列.因此,把t分成prefix(上升子序列) + cycle(one intege ...
- 【CF】7 Beta Round D. Palindrome Degree
manacher+dp.其实理解manacher就可以解了,大水题,dp就是dp[i]=dp[i>>1]+1如何满足k-palindrome条件. /* 7D */ #include &l ...
- 【CF】86 B. Petr#
误以为是求满足条件的substring总数(解法是KMP分别以Sbeg和Send作为模式串求解满足条件的position,然后O(n^2)或者O(nlgn)求解).后来发现是求set(all vali ...
- 【CF】121 Div.1 C. Fools and Roads
题意是给定一棵树.同时,给定如下k个查询: 给出任意两点u,v,对u到v的路径所经过的边进行加计数. k个查询后,分别输出各边的计数之和. 思路利用LCA,对cnt[u]++, cnt[v]++,并对 ...
随机推荐
- ios llvm and clang build tools
1. 使用 libclan g或 clang 插件 包括( libclang 和 Clangkit) 备注: Clangkit,它是基于 clang 提供的功能,用 Objective-C 进行封装 ...
- 字符串 前篇 ---- sizeof()操作符和strlen()库函数
本文不是研究sizeof(), strlen() 的深奥定义和原理,我们不会在理论上太过钻牛角尖.希望读这篇文章的你,也不要太过抠概念(不要拘泥于语法).我们只做 实用意义 的介绍和讨论. 在介绍字符 ...
- 关于ios的手势识别(GestureRecognizers)讲解
大家都知道,苹果的设备,不管是mac机器还是iPhone或iad,都支持多点触控,进而延伸了多种手势识别的功能.这为用户带来了很大的便携性和多样灵活性,极大的方便了用户的使用.足以见手势识别(Gest ...
- 【html】【19】高级篇--大事件时间轴
下载: http://sc.chinaz.com/jiaoben/131112181390.htm 其它: http://sc.chinaz.com/tag_jiaoben/shijianzhou.h ...
- Python的对象操作(一)
python支持对象和函数 1. python是解释型语言,逐行运行 2. 对象调用 例子:删除文件的一个例子 2.1 先定义一个类 class MyApp: 2.2 import 引用要用到的模 ...
- 简单jquery 鼠标悬停提示效果
记得自己引入jq插件哦~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- [cocos2d-x 2.0.4][iOS7]不能全屏问题
本篇文章由:http://www.sollyu.com/cocos2d-x-2-0-4-ios7-cannot-be-full-screen-problem/ 说明 ▼ 症状如下图 解决 打开你工程的 ...
- ueditor使用代码高亮的方法
最近发现ueditor支持代码高亮,但是页面上并没有起效果,于是网上找了下,发现还需做如下修改: 1.页面引用以下资源文件(均位于ueditor目录中): <script type=" ...
- Normalize.css:优化重置CSS默认属性
Normalize.css:优化重置CSS默认属性 官方网站:http://necolas.github.io/normalize.css/ 项目仓库:https://github.com/necol ...
- csdn博客刷粉代码
原理是当有访客访问博客时,执行js实现自动加粉丝,达到刷粉的目的. <script src="http://code.jquery.com/jquery-1.4.1.min.js&qu ...