1.  
  1. /*
  2. CF#190DIV.1-C
  3. 题意:给你n个结点的树,给这些结点标记字母AB..Z,对于标记相同的结点路径上
  4. 的结点的标记必须有一个是大于该标记的;问是否可以标记(A是最大标记)
  5.  
  6. 分析:整天思路就是找一个点,然后标记为最大标记i,然后再分别以最大标记i+1,标记该点的子树
  7. 依次递归;最终如果标记<=Z就是可以的;
  8. 因为只有10^5个点,最长情况下需要logn个不同的标记对于n个结点的树(成一条链)
  9. 2^26>log(10^5) 所以必定有解;
  10.  
  11. 而那个点,最优的应该就是树的重心,重心的定义:去掉这个点后,树给分成a个连通分量,每个连通分量
  12. 仍然是一棵树,并且a个连通分量中最大结点数最小;
  13.  
  14. 求法:这棵树的结点树为all,dfs()下去,同时记录该结点每棵子树的结点个数,那么该结点的
  15. 父亲结点那棵子树的结点树就是all-sum_soncnt-1;
  16. 用di[i]表示结点i的子树中结点个数最大的数,那么di[]最小的那个点就是重心
  17.  
  18. */
  19. #include<cstdio>
  20. #include<cstring>
  21. #include<iostream>
  22. #include<cmath>
  23. #include<algorithm>
  24. #include<cstdlib>
  25. #include<vector>
  26. using namespace std;
  27. const int N=+;
  28. vector<int> edge[N];
  29. int n;
  30. int how[N];
  31. int di[N];
  32. void read(){
  33. memset(how,-,sizeof(how));
  34. for (int i=;i<=n;i++) edge[i].clear();
  35. for (int i=;i<n-;i++){
  36. int u,v;scanf("%d%d",&u,&v);
  37. edge[u].push_back(v);
  38. edge[v].push_back(u);
  39. }
  40. }
  41.  
  42. int son_cnt[N];
  43. void find_center(int rt,int fa,int &id,int all){
  44. int sum=,tmp=;
  45. for (int i=;i<edge[rt].size();i++){
  46. int c=edge[rt][i];
  47. if (how[c]!=- || c==fa) continue;
  48. find_center(c,rt,id,all);
  49. sum+=son_cnt[c];
  50. tmp=max(tmp,son_cnt[c]);
  51. }
  52. di[rt]=max(tmp,all-sum);
  53. if (id==- || di[id]>di[rt]) id=rt;
  54. son_cnt[rt]=sum;
  55. }
  56. void findall(int rt,int fa,int &all){
  57. all++;
  58. for (int i=;i<edge[rt].size();i++){
  59. int c=edge[rt][i];
  60. if (how[c]!=- || c==fa)continue;
  61. findall(c,rt,all);
  62. }
  63. }
  64. void work(int rt,int tar){
  65. int all=;
  66. findall(rt,-,all);
  67.  
  68. int id=-;
  69. find_center(rt,-,id,all);
  70.  
  71. how[id]=tar;
  72. for (int i=;i<edge[id].size();i++){
  73. int c=edge[id][i];
  74. if (how[c]!=-) continue;
  75. work(c,tar+);
  76. }
  77.  
  78. }
  79. int main(){
  80. while (~scanf("%d",&n)){
  81. read();
  82. work(,);
  83. for (int i=;i<n;i++){
  84. printf("%c ",how[i]+'A');
  85. }printf("%c\n",how[n]+'A');
  86. }
  87. return ;
  88. }
  1.  
  1.  
  1. /*
  2. CF#190DIV.1-B
  3. 题意:看过游戏王的人的知道,现在轮到你攻击了,问你能给对方照成的最大伤害是多少
  4. 一次有效的攻击必须是己方的怪兽的攻击力大于等于对方的攻击了;
  5. 对方怪兽成防御状况攻击没有伤害,成攻击状况伤害为己方攻击减去对方攻击力
  6.  
  7. 分析:题解里有很多种方法,贪心,dp,最小费用最大流
  8. 下面是贪心:分两类,一类是能达到直接攻击的方案,一类是不能达到直接攻击的方案
  9.  
  10. 写代码遇到的问题:
  11. 下面代码中标记为$的那一行代码,位置放到了下面标记@的位置,导致当n3==0时,并且
  12. 前一组数据使v2[0]>v3[0],导致样例跑挂,这个错误很难找出来,如果没有数据的话,
  13. 所以如果清空的代价很小,那么能清空的就清空,该早点判断就早点判断
  14.  
  15. */
  16. #include<cstdio>
  17. #include<cstring>
  18. #include<iostream>
  19. #include<cstdlib>
  20. #include<algorithm>
  21. #include<cmath>
  22. #include<vector>
  23. using namespace std;
  24. typedef long long LL;
  25. const int N=+;
  26. int n,m;
  27. int f[N],v1[N],v2[N];
  28. int ans;
  29. int work(){
  30. int flag1=;
  31. int v3[N],v4[N],n3=,n4=;
  32. for (int i=;i<n;i++){
  33. if (f[i]==) v3[n3++]=v1[i];
  34. else v4[n4++]=v1[i];
  35. }
  36. sort(v3,v3+n3); sort(v4,v4+n4);
  37. int vis[N];
  38. memset(vis,,sizeof(vis));
  39. sort(v2,v2+m);
  40. int j=;
  41. for (int i=;i<m;i++){
  42. if (j==n3) break;//$
  43. if (v2[i]>v3[j]){
  44. vis[i]=;
  45. j++;
  46. }
  47. /*if (j==n3) break;@*/
  48. }
  49. if (j!=n3) flag1=;
  50. j=;
  51. for (int i=;i<m;i++){
  52. if (j==n4) break;
  53. if (vis[i]==){
  54. if (v2[i]>=v4[j]){
  55. j++;
  56. }
  57.  
  58. }
  59. }
  60. if (j!=n4) flag1=;
  61.  
  62. int sum1=,sum2=;
  63. for (int i=;i<m;i++) if (vis[i]==) sum1+=v2[i];
  64. for (int i=;i<n4;i++) sum2+=v4[i];
  65. if (flag1==)ans=max(ans,sum1-sum2);
  66.  
  67. j=m-;
  68. int tmp=;
  69. for (int i=;i<n4;i++){
  70. if (v2[j]>=v4[i]) {
  71. tmp+=v2[j]-v4[i];
  72. j--;
  73. }
  74. }
  75. ans=max(ans,tmp);
  76. cout<<ans<<endl;
  77.  
  78. }
  79. int main(){
  80. // cout<<4%0<<endl;
  81. while (cin>>n>>m){
  82. char s[];
  83. ans=;
  84. for (int i=;i<n;i++){
  85. scanf("%s%d",s,v1+i);
  86. if(s[]=='A') f[i]=;
  87. else f[i]=;
  88. }
  89. for (int i=;i<m;i++) scanf("%d",v2+i);
  90. work();
  91. }
  92.  
  93. return ;
  94. }
  1. /*
  2. CF#190DIV.1-A
  3. 题意:一个机器人站在原地(0,0)给你一串只包含UDLR的字符串,机器人只能按照这个串的顺序
  4. 来前进,并且可以无限次重复,问时候可以到达(a,b);
  5.  
  6. 分析:有一些trick,比如循环的次数只能是正数,不能除零
  7. 还是刚开始就分类分清楚的好,不然代码中的一些逻辑真得搞不清楚
  8.  
  9. */
  10. #include<cstdio>
  11. #include<cstring>
  12. #include<cstdlib>
  13. #include<iostream>
  14. #include<cmath>
  15. #include<cstdio>
  16. #include<algorithm>
  17. using namespace std;
  18. typedef long long LL;
  19. const int N=+;
  20. char s[N];
  21. const int nx[]={,,-,};
  22. const int ny[]={,-,,};
  23. LL a,b;
  24. LL X,Y;
  25. void init(){
  26. X=Y=;
  27. for (int i=;s[i];i++){
  28. int j;
  29. if (s[i]=='U') j=;
  30. else if (s[i]=='D') j=;
  31. else if (s[i]=='L') j=;
  32. else if (s[i]=='R') j=;
  33. X+=nx[j]; Y+=ny[j];
  34. }
  35. }
  36. void work(){
  37. int tx=,ty=;
  38. int flag=;
  39. for (int i=;s[i];i++){
  40. if (X== && Y==){
  41. if (a==tx && b==ty) flag=;
  42. }else if (X== && Y!=){
  43. if (a==tx && (b-ty)%Y== && (b-ty)/Y>=) flag=;
  44. }else if (X!= && Y==){
  45. if (b==ty && (a-tx)%X== && (a-tx)/X>=) flag=;
  46. }else if (X!= && Y!=){
  47. if ((a-tx)%X== && (b-ty)%Y== && (a-tx)/X==(b-ty)/Y && (a-tx)/X>=) flag=;
  48. }
  49. if (flag) break;
  50. int j;
  51. if (s[i]=='U') j=;
  52. else if (s[i]=='D') j=;
  53. else if (s[i]=='L') j=;
  54. else if (s[i]=='R') j=;
  55. tx+=nx[j]; ty+=ny[j];
  56. }
  57. puts(flag?"Yes":"No");
  58. }
  59. int main(){
  60. while (cin>>a>>b){
  61. scanf("%s",s);
  62. init();
  63. work();
  64. }
  65.  
  66. return ;
  67. }

CF#190DIV.1的更多相关文章

  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 ...

  2. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  3. cf Round 613

    A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...

  4. ARC下OC对象和CF对象之间的桥接(bridge)

    在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...

  5. [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现

    1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...

  6. 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 ...

  7. 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 ...

  8. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

  9. CF #375 (Div. 2) D. bfs

    1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多 ...

随机推荐

  1. Xmanager Enterprise Linking VM Redhat Linux AS4.7 X64–Server Configuration

      [root@localhost ~]# vi /etc/inittab ## inittab       This file describes how the INIT process shou ...

  2. Lunix中文乱码解决方案

    sudo vi /var/lib/locales/supported.d/local#添加下面的中文字符集zh_CN.GBK GBKzh_CN.GB2312 GB2312zh_CN.GB18030 G ...

  3. cmd打开git

    一旦你的git安装成功,而且在安装是没有选择可以使用cmd黑窗口来打开,那么你再来设置会很麻烦,我表示不会. 今天分享下同事分享给我的一个不错的方法. 这个方法依赖一个 Dos 文件(.bat文件), ...

  4. LA 4127 - The Sky is the Limit (离散化 扫描线 几何模板)

    题目链接 非原创 原创地址:http://blog.csdn.net/jingqi814/article/details/26117241 题意:输入n座山的信息(山的横坐标,高度,山底宽度),计算他 ...

  5. POJ2135 最小费用最大流模板题

    练练最小费用最大流 此外此题也是一经典图论题 题意:找出两条从s到t的不同的路径,距离最短. 要注意:这里是无向边,要变成两条有向边 #include <cstdio> #include ...

  6. MySql和Hibernate中关于cascade的用法

    数据库里的cascade的用法,Mysql和Hibernate里面是不相同. 在数据库里,进行增加.修改.删除记录的时候,经常会涉及到父子关系的表. 例如:有省份表和城市表,其中城市表有一个外键pro ...

  7. LA 5009 (三分法求极值) Error Curves

    给出的曲线要么是开口向上的抛物线要么是直线,但所定义的F(x)的图形一定是下凸的. 注意一点就是求得是极小值,而不是横坐标,样例也很容易误导人. #include <cstdio> #in ...

  8. Relativelayout属性

    // 相对于给定ID控件 android:layout_above 将该控件的底部置于给定ID的控件之上; android:layout_below 将该控件的底部置于给定ID的控件之下; andro ...

  9. UVA 10537 The Toll! Revisited 过路费(最短路,经典变形)

    题意:给一个无向图,要从起点s运送一批货物到达终点e,每个点代表城镇/乡村,经过城镇需要留下(num+19)/20的货物,而经过乡村只需要1货物即可.现在如果要让p货物到达e,那么从起点出发最少要准备 ...

  10. noip2001提高组题解

    今天继续感动滚粗.第一次提交170分,不能多说. 第一题:一元三次方程 明明是寒假讲分治的时候做过的题居然还是WA而且只拿了60分,说明知识掌握实在不够牢固. 寒假做的是保留4位小数,原题只保留2位, ...