【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]++,并对 ...
随机推荐
- UISearchController的使用。(iOS8+)
这种方法早就发现了,不过一致没用,今天拿过来用,发现了一些问题. 1.这个东西和表视图结合使用很方便,首先,创建新的工程,将表视图控制器作为工程的根视图,并且添加一个导航(当然,你可以不这样做,但是你 ...
- tomcat安装不成功-提示找不到JAVA虚拟机
今天重装tomcate,但是总是提示找不到java虚拟机,但是我明明装了jre和jdk,太烦人了 后来搜了各种方法,终于找到了解决方法,现在和大家分享下 到提示找java虚拟机那一步的时候,选择到jr ...
- C++ GUI Qt4编写的文本编辑器
mainwindow.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMenu> #include <QAction& ...
- outlet删除不完全
今天在用iOS写个计算器的时候,遇到的一个小bug,新手,太新了,不之所错. 直接上码: Terminating app due to uncaught exception 'NSUnknownKey ...
- C# 解析带前缀的Xml节点内容
一般的xml文件相信大家都会解析了,但是遇到有命名空间的带前缀的xml,对于新手可能会有点问题.我这里在论坛解答的时候就遇到过一题,见怎么获取XML节点里面的内容,在线求教.这里给大家演示一下. 他的 ...
- appcan 跨窗口处理方法 appcan.window.evaluateScript({name,scriptContent,type})使用解读
appcan.window.evaluateScript({ name,/*主窗口名称,此窗口要先用appcan.window.open打开了,才能找到,此方法才会有效*/ scriptContent ...
- 常用PHP缓存技术
1.全页面静态化缓存 也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程. 一种比较常用的实现方式是用输出缓存: Ob_start() ******要 ...
- JS-------DOM0级事件处理和DOM2级事件处理-------简单记法
0级DOM 分为2个:一是在标签内写onclick事件 二是在JS写onlicke=function(){}函数 1) <input id="myButton" type= ...
- codeforces 8VC Venture Cup 2016 - Elimination Round C. Lieges of Legendre
C. Lieges of Legendre 题意:给n,m表示有n个为2的倍数,m个为3的倍数:问这n+m个数不重复时的最大值 最小为多少? 数据:(0 ≤ n, m ≤ 1 000 000, n + ...
- Mac操作系统常用快捷键
复制:cmd+c 粘贴:cmd+v 剪切:先cmd+c,再cmd+opt+v 显示桌面:cmd+F3 切换输入法:cmd+space 打开Spotlight:ctrl+s ...