HourRank 19
https://www.hackerrank.com/contests/hourrank-19/challenges
第一题略。
第二题是nim博弈,问删掉一个区间的石子,使得先手败的方案有几种,明显维护前缀异或,然后一直加方案数就好了
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <vector>
#include <time.h>
#include <string>
#include <stack>
#include <set>
#include <map>
#include <iostream>
#include <bitset>
#include <algorithm>
using namespace std;
#define MP make_pair
#define rep(i,n) for(int i = 0; i < (n); i++)
#define rep1(i,n) for(int i = 1; i <= (n); i++)
#define PB push_back
#define mst(a,b) memset((a),(b),sizeof(a))
typedef long long LL;
typedef unsigned long long uLL;
typedef pair<int, int> Pii;
typedef vector<int> Vi;
typedef vector<Pii> Vii;
const int inf = 0x3f3f3f3f;
const LL INF = (1uLL << ) - ;
const LL mod = ;
const int N = 5e4 + ;
const double Pi = acos(-1.0);
const int maxn = 5e5 + ;
int num[maxn];
map<int,int>cnt;
int main() {
#ifdef local
freopen("in", "r", stdin);
//freopen("w","w",stdout);
#endif
ios::sync_with_stdio();
cin.tie();
int n;
cin>>n;
int s = ;
int res = ;
LL ans = ;
cnt[]++;
rep(i,n)cin>>num[i],res^=num[i];
rep(i,n){
s ^= num[i];
ans += cnt[s^res];
cnt[s]++;
}
cout<<ans<<endl;
}
第三题Maximal Tree Diameter
题意:
选择一条边把这棵树分开,然后任选两个顶点再把这两棵树合并,使得新合成的树直径最长。
做法:
我们先树dp求出dp[u][(0,2)]分别表示这个点往下的三个最长次长第三长的路径,然后再求fu[u]表示从u这个点出发到达往父亲那条路径走的最长路径。。这里很像hdu2196的一个操作,然后我们在第一次dp时,顺便求出subtree[u]表示,u的子树的最长直径(不一定包括u),有了上面的,我们就可以维护答案了,当跑到一个点u,它的一个儿子是v时,当我们选择拆这条边我们怎么能取得最优解呢,明显,我们需要subtree[v] + dp[v][0] + max(dp[v][1],fu[v]).但是这条边很有可能是就是u的最长路径,或者次长,或者其他,所以我们才需要更新其他的一些信息。
比赛的时候没考虑到第三长的边= = 感觉很亏。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <vector>
#include <time.h>
#include <string>
#include <stack>
#include <set>
#include <map>
#include <iostream>
#include <bitset>
#include <algorithm>
using namespace std;
#define MP make_pair
#define rep(i,n) for(int i = 0; i < (n); i++)
#define rep1(i,n) for(int i = 1; i <= (n); i++)
#define PB push_back
#define mst(a,b) memset((a),(b),sizeof(a))
typedef long long LL;
typedef unsigned long long uLL;
typedef pair<int, int> Pii;
typedef vector<int> Vi;
typedef vector<Pii> Vii;
const int inf = 0x3f3f3f3f;
const LL INF = (1uLL << ) - ;
const LL mod = ;
const int N = 5e4 + ;
const double Pi = acos(-1.0);
const int maxn = 5e5 + ;
int dp[maxn][];
Vi edge[maxn];
int dostree[maxn];
int fu[maxn];
void um(int &a,int b){
if(a < b)a = b;
}
void sfs1(int u, int fa) {
dostree[u] = dp[u][] = dp[u][] = dp[u][] = ;
for(int v : edge[u]) {
if(v == fa)continue;
sfs1(v, u);
um(dostree[u],dostree[v]);
if(dp[v][] + >= dp[u][]){
dp[u][] = dp[u][];
dp[u][] = dp[u][];
dp[u][] = dp[v][] + ;
}else if(dp[v][] + >= dp[u][]){
dp[u][] = dp[u][];
dp[u][] = dp[v][] + ;
}else if(dp[v][] + >= dp[u][]){
dp[u][] = dp[v][] + ;
}
}
um(dostree[u],dp[u][] + dp[u][]);
}
void sfs2(int u,int fa){
for(int v : edge[u]){
if(v == fa)continue;
fu[v] = max(fu[u],dp[v][] + == dp[u][]? dp[u][] : dp[u][]) + ;
sfs2(v,u);
}
}
int res = ;
void sfs3(int u,int fa){
for(int v : edge[u]){
if(v == fa)continue;
if(dp[v][] + == dp[u][]){
um(res,dostree[v] + + dp[u][] + dp[u][]);
um(res,dostree[v] + + dp[u][] + fu[u]);
}else if(dp[v][] + == dp[u][]){
um(res,dostree[v] + + dp[u][] + dp[u][]);
um(res,dostree[v] + + dp[u][] + fu[u]);
}else {
um(res,dostree[v] + + dp[u][] + dp[u][]);
um(res,dostree[v] + + dp[u][] + fu[u]);
}
sfs3(v,u);
}
}
int main() {
#ifdef local
freopen("in", "r", stdin);
//freopen("w","w",stdout);
#endif
ios::sync_with_stdio();
cin.tie();
int n;
cin >> n;
rep(i, n - ) {
int u, v;
cin >> u >> v;
edge[u].PB(v);
edge[v].PB(u);
}
sfs1(,);
sfs2(,);
sfs3(,);
cout<<res<<endl;
}
HourRank 19的更多相关文章
- Mediaplayer error (-19,0)
Android MediaPlayer 发生 error (-19,0) 错误解决方法. 引起原因:由于多次实例化MediaPlayer.start() 进行播放操作引起的.由于没有及时释放内存资源导 ...
- 录像时调用MediaRecorder的start()时发生start failed: -19错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#)
CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#) 效果图 本文解决了将OpenGL渲染出来的内容保存到PNG图片的方法. 下载 CSharpGL已在GitHub开 ...
- ABP(现代ASP.NET样板开发框架)系列之19、ABP应用层——审计日志
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之19.ABP应用层——审计日志 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- js正则表达式校验非负浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js正则表达式校验非负整数:^\d+$ 或 ^[1-9]\d*|0$
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js正则表达式校验非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- C#开发微信门户及应用(19)-微信企业号的消息发送(文本、图片、文件、语音、视频、图文消息等)
我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送.回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流.企业号具有关注安全.消息无限制等特 ...
- 19-typedef
本文目录 一.typedef作用简介 二.typedef与指针 三.typedef与结构体 三.typedef与指向结构体的指针 四.typedef与枚举类型 五.typedef与指向函数的指针 六. ...
随机推荐
- android开发之-数据存储Map、HashMap、Hashtable、concurenthashmap区别
选择一个map进行软件基础数据初始化操作,要求第一次初始化后,不修改数据,可能会出现静态类被回收,然后在进行初始化操作? 1.Map :接口 /** * A {@code Map} is a data ...
- 浅析Java中synchronized与static synchronized
synchronized关键字 synchronized是进行同步处理而保证线程安全.在一个方法中,如果是方法内的私有变量,那个这个变量是线程安全的,但是类中的实例变量是可能会出现线程安全问题的,当多 ...
- ServerSuperIO 3.5版本的体系结构,以及未来规划的几点思考
一.特点 1.轻型高性能通信框架,适用于多种应用场,轮询模式.自控模式.并发模式和单例模式. 2.不仅是通讯框架,是设备驱动.IO通道.控制模式场景的协调机制. 3.支持协议驱动器,可以按规范写标准协 ...
- SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除临时表(drop table #tableName)吗?
本文出处:http://www.cnblogs.com/wy123/p/6704619.html 问题背景 在写SQL Server存储过程中,如果存储过程中定义了临时表,有些人习惯在存储过程结束的时 ...
- ios app网址说明
URLforBrowser = 'https://itunes.apple.com/cn/app/wan-huo-shi-shang-zhu-li-ren/id1077705***'; URLfori ...
- Coordinator节点
Coordinator节点 Coordinator 节点主要负责segment 的管理和分配.更具体的说,它同通过配置往historical 节点 load 或者 drop segment .Coo ...
- WebForm捆绑压缩js和css(WebForm Bundling and Minification)
.net framework 4以上,可以使用Microsoft.AspNet.Web.Optimization 新建4.0项目 Nuget搜索optimization,安装第一个包 加入Bundle ...
- Asp.net Authorization 学习
其实使用新的Identity以来一直有一个疑惑,之前的角色管理 在新的Identity中怎么管理的.[AspNetUserClaims] 在新的授权管理中又占什么位置 第一,根据角色授权,刚刚注册的用 ...
- eclipse中AndroidA工程依赖B工程设置
假设library为B工程,而SlideMenuTest为A工程,且SlideMenuTest需要依赖library工程(减少jar包形式的修改麻烦). 需要简单的设置即可. 1.B工程设置为libr ...
- C语言结构体中字符数组的问题
第一个程序 #include <stdio.h> #include <string.h> typedef struct student { char name[10]; int ...