CF#190DIV.1
/*
CF#190DIV.1-C
题意:给你n个结点的树,给这些结点标记字母AB..Z,对于标记相同的结点路径上
的结点的标记必须有一个是大于该标记的;问是否可以标记(A是最大标记) 分析:整天思路就是找一个点,然后标记为最大标记i,然后再分别以最大标记i+1,标记该点的子树
依次递归;最终如果标记<=Z就是可以的;
因为只有10^5个点,最长情况下需要logn个不同的标记对于n个结点的树(成一条链)
2^26>log(10^5) 所以必定有解; 而那个点,最优的应该就是树的重心,重心的定义:去掉这个点后,树给分成a个连通分量,每个连通分量
仍然是一棵树,并且a个连通分量中最大结点数最小; 求法:这棵树的结点树为all,dfs()下去,同时记录该结点每棵子树的结点个数,那么该结点的
父亲结点那棵子树的结点树就是all-sum_soncnt-1;
用di[i]表示结点i的子树中结点个数最大的数,那么di[]最小的那个点就是重心 */
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<vector>
using namespace std;
const int N=+;
vector<int> edge[N];
int n;
int how[N];
int di[N];
void read(){
memset(how,-,sizeof(how));
for (int i=;i<=n;i++) edge[i].clear();
for (int i=;i<n-;i++){
int u,v;scanf("%d%d",&u,&v);
edge[u].push_back(v);
edge[v].push_back(u);
}
} int son_cnt[N];
void find_center(int rt,int fa,int &id,int all){
int sum=,tmp=;
for (int i=;i<edge[rt].size();i++){
int c=edge[rt][i];
if (how[c]!=- || c==fa) continue;
find_center(c,rt,id,all);
sum+=son_cnt[c];
tmp=max(tmp,son_cnt[c]);
}
di[rt]=max(tmp,all-sum);
if (id==- || di[id]>di[rt]) id=rt;
son_cnt[rt]=sum;
}
void findall(int rt,int fa,int &all){
all++;
for (int i=;i<edge[rt].size();i++){
int c=edge[rt][i];
if (how[c]!=- || c==fa)continue;
findall(c,rt,all);
}
}
void work(int rt,int tar){
int all=;
findall(rt,-,all); int id=-;
find_center(rt,-,id,all); how[id]=tar;
for (int i=;i<edge[id].size();i++){
int c=edge[id][i];
if (how[c]!=-) continue;
work(c,tar+);
} }
int main(){
while (~scanf("%d",&n)){
read();
work(,);
for (int i=;i<n;i++){
printf("%c ",how[i]+'A');
}printf("%c\n",how[n]+'A');
}
return ;
}
/*
CF#190DIV.1-B
题意:看过游戏王的人的知道,现在轮到你攻击了,问你能给对方照成的最大伤害是多少
一次有效的攻击必须是己方的怪兽的攻击力大于等于对方的攻击了;
对方怪兽成防御状况攻击没有伤害,成攻击状况伤害为己方攻击减去对方攻击力 分析:题解里有很多种方法,贪心,dp,最小费用最大流
下面是贪心:分两类,一类是能达到直接攻击的方案,一类是不能达到直接攻击的方案 写代码遇到的问题:
下面代码中标记为$的那一行代码,位置放到了下面标记@的位置,导致当n3==0时,并且
前一组数据使v2[0]>v3[0],导致样例跑挂,这个错误很难找出来,如果没有数据的话,
所以如果清空的代价很小,那么能清空的就清空,该早点判断就早点判断 */
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
typedef long long LL;
const int N=+;
int n,m;
int f[N],v1[N],v2[N];
int ans;
int work(){
int flag1=;
int v3[N],v4[N],n3=,n4=;
for (int i=;i<n;i++){
if (f[i]==) v3[n3++]=v1[i];
else v4[n4++]=v1[i];
}
sort(v3,v3+n3); sort(v4,v4+n4);
int vis[N];
memset(vis,,sizeof(vis));
sort(v2,v2+m);
int j=;
for (int i=;i<m;i++){
if (j==n3) break;//$
if (v2[i]>v3[j]){
vis[i]=;
j++;
}
/*if (j==n3) break;@*/
}
if (j!=n3) flag1=;
j=;
for (int i=;i<m;i++){
if (j==n4) break;
if (vis[i]==){
if (v2[i]>=v4[j]){
j++;
} }
}
if (j!=n4) flag1=; int sum1=,sum2=;
for (int i=;i<m;i++) if (vis[i]==) sum1+=v2[i];
for (int i=;i<n4;i++) sum2+=v4[i];
if (flag1==)ans=max(ans,sum1-sum2); j=m-;
int tmp=;
for (int i=;i<n4;i++){
if (v2[j]>=v4[i]) {
tmp+=v2[j]-v4[i];
j--;
}
}
ans=max(ans,tmp);
cout<<ans<<endl; }
int main(){
// cout<<4%0<<endl;
while (cin>>n>>m){
char s[];
ans=;
for (int i=;i<n;i++){
scanf("%s%d",s,v1+i);
if(s[]=='A') f[i]=;
else f[i]=;
}
for (int i=;i<m;i++) scanf("%d",v2+i);
work();
} return ;
}
/*
CF#190DIV.1-A
题意:一个机器人站在原地(0,0)给你一串只包含UDLR的字符串,机器人只能按照这个串的顺序
来前进,并且可以无限次重复,问时候可以到达(a,b); 分析:有一些trick,比如循环的次数只能是正数,不能除零
还是刚开始就分类分清楚的好,不然代码中的一些逻辑真得搞不清楚 */
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N=+;
char s[N];
const int nx[]={,,-,};
const int ny[]={,-,,};
LL a,b;
LL X,Y;
void init(){
X=Y=;
for (int i=;s[i];i++){
int j;
if (s[i]=='U') j=;
else if (s[i]=='D') j=;
else if (s[i]=='L') j=;
else if (s[i]=='R') j=;
X+=nx[j]; Y+=ny[j];
}
}
void work(){
int tx=,ty=;
int flag=;
for (int i=;s[i];i++){
if (X== && Y==){
if (a==tx && b==ty) flag=;
}else if (X== && Y!=){
if (a==tx && (b-ty)%Y== && (b-ty)/Y>=) flag=;
}else if (X!= && Y==){
if (b==ty && (a-tx)%X== && (a-tx)/X>=) flag=;
}else if (X!= && Y!=){
if ((a-tx)%X== && (b-ty)%Y== && (a-tx)/X==(b-ty)/Y && (a-tx)/X>=) flag=;
}
if (flag) break;
int j;
if (s[i]=='U') j=;
else if (s[i]=='D') j=;
else if (s[i]=='L') j=;
else if (s[i]=='R') j=;
tx+=nx[j]; ty+=ny[j];
}
puts(flag?"Yes":"No");
}
int main(){
while (cin>>a>>b){
scanf("%s",s);
init();
work();
} return ;
}
CF#190DIV.1的更多相关文章
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- cf Round 613
A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...
- ARC下OC对象和CF对象之间的桥接(bridge)
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
- CF memsql Start[c]UP 2.0 A
CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...
- CF memsql Start[c]UP 2.0 B
CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...
- CF #376 (Div. 2) C. dfs
1.CF #376 (Div. 2) C. Socks dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...
- CF #375 (Div. 2) D. bfs
1.CF #375 (Div. 2) D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...
随机推荐
- IOS代码
//// MJViewController.m// UITableView-编辑模式//// Created by mj on 13-4-11.// Copyright (c) 2013年 itcas ...
- NDK(21)JNI的5大正确性缺陷及优化技巧(注意是正确性缺陷)
转自 : http://www.ibm.com/developerworks/cn/java/j-jni/index.html JNI 编程缺陷可以分为两类: 性能:代码能执行所设计的功能,但运行缓慢 ...
- 面试题_ Java EE 相关的面试题
为了做 Java EE 的朋友,这里列出了一些 web 开发的特定问题,你们可以用来准备 JEE 部分的面试: 10 大 Spring 框架面试题及答案(参见)10 个非常好的 XML 面试问题(Ja ...
- Hadoop集群(第7期)_Eclipse开发环境设置
1.Hadoop开发环境简介 1.1 Hadoop集群简介 Java版本:jdk-6u31-linux-i586.bin Linux系统:CentOS6.0 Hadoop版本:hadoop-1.0.0 ...
- hdu 4864 Task (贪心 技巧)
题目链接 一道很有技巧的贪心题目. 题意:有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间xi和等级yi, 对于每个任务,也有一个运行时间xj和等级yj.只有当xi& ...
- UVa 10870 (矩阵快速幂) Recurrences
给出一个d阶线性递推关系,求f(n) mod m的值. , 求出An-dv0,该向量的最后一个元素就是所求. #include <iostream> #include <cstdio ...
- LA 3510 (置换 循环分解) Pixel Shuffle
思路挺简单的,题目中的每个命令(包括命令的逆)相当于一个置换. 用O(n2k)的时间复杂度从右往左求出这些置换的乘积A,然后求m使Am = I(I为全等置换) 还是先把A分解循环,m则等于所有循环节长 ...
- CodeForces 489D Unbearable Controversy of Being
题意: 给出一个n个节点m条边的有向图,求如图所示的菱形的个数. 这四个节点必须直接相邻,菱形之间不区分节点b.d的个数. 分析: 我们枚举每个a和c,然后求出所有满足a邻接t且t邻接c的节点的个数记 ...
- Java Web编程的主要组件技术——Struts的高级功能
参考书籍:<J2EE开源编程精要15讲> Struts对国际化的支持 "国际化"(I18N)指一个应用程序在运行时能根据客户端请求所来的国家/地区.语言的不同显示不同的 ...
- TCP/IP详解学习笔记(10)-TCP连接的建立与中止
TCP是一个面向连接的协议,所以在连接双方发送数据之前,都需要首先建立一条连接.这和前面讲到的协议完全不同.前面讲的所有协议都只是发送数据而已,大多数都不关心发送的数据是不是送到,UDP尤其明显,从编 ...