A

  1. /*Huyyt*/
  2. #include<bits/stdc++.h>
  3. #define mem(a,b) memset(a,b,sizeof(a))
  4. using namespace std;
  5. typedef long long ll;
  6. typedef unsigned long long ull;
  7. const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
  8. const int mod = 1e9 + , gakki = + + + + 1e9;
  9. const int MAXN = 2e5 + , MAXM = 2e5 + , N = 2e5 + ;
  10. const int MAXQ = ;
  11. /*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;
  12. inline void addedge(int u, int v)
  13. {
  14. to[++tot] = v;
  15. nxt[tot] = Head[u];
  16. Head[u] = tot;
  17. }*/
  18. inline void read(int &v)
  19. {
  20. v = ;
  21. char c = ;
  22. int p = ;
  23. while (c < '' || c > '')
  24. {
  25. if (c == '-')
  26. {
  27. p = -;
  28. }
  29. c = getchar();
  30. }
  31. while (c >= '' && c <= '')
  32. {
  33. v = (v << ) + (v << ) + c - '';
  34. c = getchar();
  35. }
  36. v *= p;
  37. }
  38. int num[];
  39. int anser[];
  40. map<string, int> mp;
  41. int main()
  42. {
  43. mp["S"] = , mp["M"] = , mp["L"] = ;
  44. mp["XL"] = , mp["XXL"] = , mp["XXXL"] = ;
  45. mp["XS"] = , mp["XXS"] = , mp["XXXS"] = ;
  46. int n;
  47. int ans = ;
  48. read(n);
  49. string now;
  50. for (int i = ; i <= n; i++)
  51. {
  52. cin >> now;
  53. num[mp[now]]++;
  54. }
  55. for (int i = ; i <= n; i++)
  56. {
  57. cin >> now;
  58. anser[mp[now]]++;
  59. }
  60. for (int i = ; i <= ; i++)
  61. {
  62. ans += abs(num[i] - anser[i]);
  63. }
  64. cout << ans / << endl;
  65. return ;
  66. }

B

分奇偶即可

  1. /*Huyyt*/
  2. #include<bits/stdc++.h>
  3. #define mem(a,b) memset(a,b,sizeof(a))
  4. using namespace std;
  5. typedef long long ll;
  6. typedef unsigned long long ull;
  7. const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
  8. const int mod = 1e9 + , gakki = + + + + 1e9;
  9. const int MAXN = 2e5 + , MAXM = 2e5 + , N = 2e5 + ;
  10. const int MAXQ = ;
  11. /*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;
  12. inline void addedge(int u, int v)
  13. {
  14. to[++tot] = v;
  15. nxt[tot] = Head[u];
  16. Head[u] = tot;
  17. }*/
  18. inline void read(int &v)
  19. {
  20. v = ;
  21. char c = ;
  22. int p = ;
  23. while (c < '' || c > '')
  24. {
  25. if (c == '-')
  26. {
  27. p = -;
  28. }
  29. c = getchar();
  30. }
  31. while (c >= '' && c <= '')
  32. {
  33. v = (v << ) + (v << ) + c - '';
  34. c = getchar();
  35. }
  36. v *= p;
  37. }
  38. int num[];
  39. int anser = ;
  40. int number[];
  41. int main()
  42. {
  43. ios_base::sync_with_stdio();
  44. cin.tie();
  45.  
  46. int n, m;
  47. cin >> n >> m;
  48. for (int i = ; i <= n; i++)
  49. {
  50. cin >> num[i];
  51. }
  52. n++;
  53. num[n] = m;
  54. for (int i = ; i <= n; i++)
  55. {
  56. number[i] = number[i - ];
  57. if (i & )
  58. {
  59. int add = num[i] - num[i - ];
  60. number[i] += add;
  61. }
  62. }
  63. anser = number[n];
  64. for (int i = ; i <= n - ; i++)
  65. {
  66. if (num[i] - > num[i - ] || num[i] + < num[i + ])
  67. {
  68. if (i & )
  69. {
  70. int now = number[i] + m - num[i] + number[i] - number[n] - ;
  71. anser = max(anser, now);
  72. }
  73. }
  74. }
  75. cout << anser << endl;
  76. return ;
  77. }

C

离散化前缀和

  1. /*Huyyt*/
  2. #include<bits/stdc++.h>
  3. #define mem(a,b) memset(a,b,sizeof(a))
  4. using namespace std;
  5. typedef long long ll;
  6. typedef unsigned long long ull;
  7. const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
  8. const int mod = 1e9 + , gakki = + + + + 1e9;
  9. const int MAXN = 2e5 + , MAXM = 2e5 + , N = 2e5 + ;
  10. const int MAXQ = ;
  11. /*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;
  12. inline void addedge(int u, int v)
  13. {
  14. to[++tot] = v;
  15. nxt[tot] = Head[u];
  16. Head[u] = tot;
  17. }*/
  18. inline void read(int &v)
  19. {
  20. v = ;
  21. char c = ;
  22. int p = ;
  23. while (c < '' || c > '')
  24. {
  25. if (c == '-')
  26. {
  27. p = -;
  28. }
  29. c = getchar();
  30. }
  31. while (c >= '' && c <= '')
  32. {
  33. v = (v << ) + (v << ) + c - '';
  34. c = getchar();
  35. }
  36. v *= p;
  37. }
  38. ll number[];
  39. ll ans[];
  40. ll l[], r[];
  41. ll anser[];
  42. map<ll, ll> mp;
  43. map<ll, ll> mpb;
  44. int main()
  45. {
  46. ios_base::sync_with_stdio();
  47. cin.tie();
  48.  
  49. int n;
  50. cin >> n;
  51. for (int i = ; i <= n; i++)
  52. {
  53. cin >> l[i] >> r[i];
  54. number[ * i - ] = l[i];
  55. number[ * i - ] = r[i];
  56. number[ * i] = r[i] + ;
  57. }
  58. sort(number + , number + * n + );
  59. int pop = unique(number + , number + * n + ) - number - ;
  60. // for (int i = 1; i <= pop; i++)
  61. // {
  62. // cout << number[i] << " ";
  63. // }
  64. // cout << endl;
  65. for (int i = ; i <= pop; i++)
  66. {
  67. mp[number[i]] = i;
  68. mpb[i] = number[i];
  69. }
  70. for (int i = ; i <= n; i++)
  71. {
  72. ans[mp[l[i]]]++;
  73. ans[mp[r[i]] + ]--;
  74. }
  75. for (int i = ; i <= pop; i++)
  76. {
  77. ans[i] += ans[i - ];
  78. }
  79. ll cur = ans[];
  80. for (int i = ; i <= pop - ; i++)
  81. {
  82. cur = ans[i];
  83. anser[cur] += mpb[i + ] - mpb[i];
  84. }
  85. cur = ans[pop];
  86. anser[cur]++;
  87. for (int i = ; i <= n; i++)
  88. {
  89. cout << anser[i] << " ";
  90. }
  91. cout << endl;
  92. return ;
  93. }

D

倒着DP

  1. /*Huyyt*/
  2. #include<bits/stdc++.h>
  3. #define mem(a,b) memset(a,b,sizeof(a))
  4. using namespace std;
  5. typedef long long ll;
  6. typedef unsigned long long ull;
  7. const int dir[][] = {{, }, {, }, {, -}, { -, }, {, }, {, -}, { -, -}, { -, }};
  8. const int mod = , gakki = + + + + 1e9;
  9. const int MAXN = 2e5 + , MAXM = 2e5 + , N = 2e5 + ;
  10. const int MAXQ = ;
  11. /*int to[MAXM << 1], nxt[MAXM << 1], Head[MAXN], tot = 1;
  12. inline void addedge(int u, int v)
  13. {
  14. to[++tot] = v;
  15. nxt[tot] = Head[u];
  16. Head[u] = tot;
  17. }*/
  18. inline void read(int &v)
  19. {
  20. v = ;
  21. char c = ;
  22. int p = ;
  23. while (c < '' || c > '')
  24. {
  25. if (c == '-')
  26. {
  27. p = -;
  28. }
  29. c = getchar();
  30. }
  31. while (c >= '' && c <= '')
  32. {
  33. v = (v << ) + (v << ) + c - '';
  34. c = getchar();
  35. }
  36. v *= p;
  37. }
  38. ll zuhe[][];
  39. int n;
  40. ll num[];
  41. ll ans[];
  42. ll anser = ;
  43. void init()
  44. {
  45. zuhe[][] = ;
  46. for (int i = ; i <= n; i++)
  47. {
  48. zuhe[i][] = ;
  49. for (int j = ; j <= i; j++)
  50. {
  51. zuhe[i][j] = (zuhe[i - ][j] + zuhe[i - ][j - ]) % mod;
  52. }
  53. }
  54. }
  55. int main()
  56. {
  57. ios_base::sync_with_stdio();
  58. cin.tie();
  59.  
  60. cin >> n;
  61. ans[n + ] = ;
  62. init();
  63. for (int i = ; i <= n; i++)
  64. {
  65. cin >> num[i];
  66. }
  67. for (int i = n; i >= ; i--)
  68. {
  69. if (num[i] <= )
  70. {
  71. continue;
  72. }
  73. for (int j = i + num[i] + ; j <= n + ; j++)
  74. {
  75. ans[i] += zuhe[j - i - ][num[i]] * ans[j];
  76. ans[i] %= mod;
  77. }
  78. }
  79. for (int i = ; i <= n; i++)
  80. {
  81. anser += 1LL * ans[i];
  82. anser %= mod;
  83. }
  84. cout << anser << endl;
  85. return ;
  86. }

E

边双联通分量缩点后是一颗树 再求树的直径即可

  1. /*Huyyt*/
  2. #include <bits/stdc++.h>
  3. #include <vector>
  4. #include <cstdio>
  5. #include <cstring>
  6. #include <string>
  7. #include <cmath>
  8. #include <iostream>
  9. #include <algorithm>
  10. #include <queue>
  11. #include <cstdlib>
  12. #include <stack>
  13. #include <vector>
  14. #include <set>
  15. #include <map>
  16. #define mem(a,b) memset(a,b,sizeof(a))
  17. using namespace std;
  18. const int N = + ;
  19. const int M = + ;
  20. struct EDGE
  21. {
  22. int v, next;
  23. } edge[M * ];
  24. int first[N], low[N], dfn[N], belong[N], degree[N], sta[M], instack[M];
  25. vector<int> gra[];
  26. int g, cnt, top, scc;
  27. int min(int a, int b)
  28. {
  29. return a < b ? a : b;
  30. }
  31. void AddEdge(int u, int v)
  32. {
  33. edge[g].v = v;
  34. edge[g].next = first[u];
  35. first[u] = g++;
  36. }
  37. void Tarjan(int u, int fa)
  38. {
  39. int i, v;
  40. low[u] = dfn[u] = ++cnt;
  41. sta[++top] = u;
  42. instack[u] = ;
  43. for (i = first[u]; i != -; i = edge[i].next)
  44. {
  45. v = edge[i].v;
  46. if (i == (fa ^ ))
  47. {
  48. continue;
  49. }
  50. if (!dfn[v])
  51. {
  52. Tarjan(v, i);
  53. low[u] = min(low[u], low[v]);
  54. }
  55. else if (instack[v])
  56. {
  57. low[u] = min(low[u], dfn[v]);
  58. }
  59. }
  60. if (dfn[u] == low[u])
  61. {
  62. scc++;
  63. while ()
  64. {
  65. v = sta[top--];
  66. instack[v] = ;
  67. belong[v] = scc;
  68. if (v == u)
  69. {
  70. break;
  71. }
  72. }
  73. }
  74. }
  75. map<pair<int, int>, int> mp;
  76. int ssssstart, eeeeeeend;
  77. int distence[];
  78. int visit[];
  79. void getdis(int x)
  80. {
  81. visit[x] = ;
  82. int len = gra[x].size();
  83. for (int i = ; i < len; i++)
  84. {
  85. int to = gra[x][i];
  86. if (visit[to])
  87. {
  88. continue;
  89. }
  90. distence[to] = distence[x] + ;
  91. getdis(to);
  92. }
  93. }
  94. int main()
  95. {
  96. ios_base::sync_with_stdio();
  97. cin.tie();
  98. memset(first, -, sizeof(first));
  99. int n, m;
  100. int u, v;
  101. cin >> n >> m;
  102. for (int i = ; i <= m; i++)
  103. {
  104. cin >> u >> v;
  105. AddEdge(u, v);
  106. AddEdge(v, u);
  107. }
  108. for (int i = ; i <= n; i++)
  109. {
  110. if (!dfn[i])
  111. {
  112. Tarjan(i, -);
  113. }
  114. }
  115. for (int i = ; i <= n; i++)
  116. {
  117. for (int j = first[i]; j != -; j = edge[j].next)
  118. {
  119. v = edge[j].v;
  120. if (belong[i] != belong[v])
  121. {
  122. if (!mp[make_pair(belong[i], belong[v])])
  123. {
  124. gra[belong[i]].push_back(belong[v]);
  125. gra[belong[v]].push_back(belong[i]);
  126. mp[make_pair(belong[i], belong[v])] = mp[make_pair(belong[v], belong[i])] = ;
  127. }
  128. }
  129. }
  130. }
  131. getdis();
  132. int maxnn = -;
  133. for (int i = ; i <= scc; i++)
  134. {
  135. if (distence[i] > maxnn)
  136. {
  137. ssssstart = i;
  138. maxnn = distence[i];
  139. }
  140. }
  141. mem(visit, ), mem(distence, );
  142. getdis(ssssstart);
  143. maxnn = -;
  144. for (int i = ; i <= scc; i++)
  145. {
  146. if (distence[i] > maxnn)
  147. {
  148. eeeeeeend = i;
  149. maxnn = distence[i];
  150. }
  151. }
  152. cout << distence[eeeeeeend] << endl;
  153. return ;
  154. }

Codeforces 1000 组合数可行线段倒dp 边双联通缩点求树直径的更多相关文章

  1. hdu 4612 双联通缩点+树形dp

    #pragma comment(linker,"/STACK:102400000,102400000")//总是爆栈加上这个就么么哒了 #include<stdio.h> ...

  2. hdu 2242双联通分量+树形dp

    /*先求出双联通缩点,然后进行树形dp*/ #include<stdio.h> #include<string.h> #include<math.h> #defin ...

  3. Codeforces.264E.Roadside Trees(线段树 DP LIS)

    题目链接 \(Description\) \(Solution\) 还是看代码好理解吧. 为了方便,我们将x坐标左右反转,再将所有高度取反,这样依然是维护从左到右的LIS,但是每次是在右边删除元素. ...

  4. [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)

    [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...

  5. [Codeforces 865C]Gotta Go Fast(期望dp+二分答案)

    [Codeforces 865C]Gotta Go Fast(期望dp+二分答案) 题面 一个游戏一共有n个关卡,对于第i关,用a[i]时间通过的概率为p[i],用b[i]通过的时间为1-p[i],每 ...

  6. codeforces 161D Distance in Tree 树形dp

    题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...

  7. Codeforces 682 D. Alyona and Strings (dp)

    题目链接:http://codeforces.com/contest/682/problem/D 给你两个字符串,求两个字符串中顺序k个的相同子串 长度之和.(注意是子串) dp[i][j][k][0 ...

  8. CodeForces 55D "Beautiful numbers"(数位DP+离散化处理)

    传送门 参考资料: [1]:CodeForces 55D Beautiful numbers(数位dp&&离散化) 我的理解: 起初,我先定义一个三维数组 dp[ i ][ j ][ ...

  9. 【2019.8.6 慈溪模拟赛 T3】集合(set)(线段树上DP)

    线段树上\(DP\) 首先发现,每个数肯定是向自己的前驱或后继连边的. 则我们开一棵权值线段树,其中每一个节点记录一个\(f_{0/1,0/1}\),表示在这个区间左.右端点是否连过边的情况下,使这个 ...

随机推荐

  1. elk、kafka、zookeeper 安装

    .elk解释 ELK分别是Elasticsearch.Logstash.Kibana三个开源框架缩写 Elasticsearch 开源分布式搜索引擎,提供存储.分析.搜索功能.特点:分布式.基于rea ...

  2. 061. Rotate List

    题目链接:https://leetcode.com/problems/rotate-list/description/ Example 1: Input: 1->2->3->4-&g ...

  3. Spring:注解(@suppresswarnings,@Valid,初始化静态配置数据,定时任务,@EnableAutoConfiguration)

    1.@suppresswarnings(" ") 2.@Valid @Valid注解用于校验,所属包为:javax.validation.Valid. ① 首先需要在实体类的相应字 ...

  4. Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)

    继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...

  5. 4-2 编辑器之神--vim

    vim vi:Visual editor文本编辑器 文本:ascii,Unicode vim:VIsual editor iMproved 官网:www.vim.org 帮助网站:Vimhelp.or ...

  6. Htmlunit 设置缓存文件

    起因:最近用Htmlunit爬取网页.demo运行起来后,发现速度相当慢,一直在不停的加载js文件,偶尔还会报错,js超时等.抓包工具看了一下请求,发现一直在不停的下载js文件.按理说请求过js文件后 ...

  7. CISCO路由器WAN口动态ISP配置

        Building configuration... version 15.0 service timestamps debug datetime msec service timestamps ...

  8. win10任务切换变卡

    问题:更新之前没有任何问题,用alt+tab是秒切,更新后切换任务后会黑屏一两秒然后才转到切换页面 解决方法:关闭服务“system interface foundation service”

  9. selenium—alert用法

    切换到弹框: switch_to_alert() ① alert.accept()  确认弹框 driver.switch_to_alert().accept() ② alert.dismiss() ...

  10. 传统Java Web(非Spring Boot)、非Java语言项目接入Spring Cloud方案--temp

    技术架构在向spring Cloud转型时,一定会有一些年代较久远的项目,代码已变成天书,这时就希望能在不大规模重构的前提下将这些传统应用接入到Spring Cloud架构体系中作为一个服务以供其它项 ...