A. 电压机制

题意转换为所有奇环的并排除掉所有偶环留下的边的个数 .

建出 DFS 树,然后只有返祖边可能构成环 .

于是类似树上差分,\(odd_u\) 统计奇环,\(even_u\) 统计偶环 .

如果一条返祖边 \(u\leftrightarrow v\) 形成奇环,则 \(odd_u\) 自增 \(1\),\(odd_v\) 自减 \(1\),偶环类似 .

于是 \(u\) 的子树 \(odd\) 和即为 DFS 树上 \(u\) 与其父节点连接的边被多少奇环包含 .

于是就可以随便统计答案了,时间复杂度 \(O(n+m)\) .

  1. using namespace std;
  2. const int N = 1e5 + 233;
  3. typedef pair<int, int> pii;
  4. typedef long long ll;
  5. vector<pii> g[N];
  6. inline void addedge(int u, int v, int w){g[u].emplace_back(make_pair(v, w));}
  7. inline void ade(int u, int v, int w){addedge(u, v, w); addedge(v, u, w);}
  8. int n, m, col[N], odd[N], od[N], oddcycle;
  9. bool vis[N];
  10. inline void dfs(int u)
  11. {
  12. for (pii _ : g[u])
  13. {
  14. int v = _.first, id = _.second;
  15. if (vis[id]) continue;
  16. vis[id] = true;
  17. if (col[v])
  18. {
  19. if (col[u] == col[v]){++oddcycle; ++odd[u]; --odd[v]; ++od[id];}
  20. else{--odd[u]; ++odd[v]; --od[id];}
  21. }
  22. else{col[v] = 3 - col[u]; dfs(v); odd[u] += odd[v]; od[id] += odd[v];}
  23. }
  24. }
  25. int main()
  26. {
  27. scanf("%d%d", &n, &m);
  28. for (int i=1, u, v; i<=m; i++) scanf("%d%d", &u, &v), ade(u, v, i);
  29. col[1] = 1; dfs(1);
  30. int ans = 0;
  31. for (int i=1; i<=m; i++) ans += (od[i] == oddcycle);
  32. printf("%d\n", ans);
  33. return 0;
  34. }

B. 括号密码

不会 .

C. 内积

AH/HNOI2017 礼物 究极弱化版?

根据排序不等式知把 \(\{a\},\{b\}\) 从小到大排答案是最大的 .

做完了 .

  1. using namespace std;
  2. typedef pair<int, int> pii;
  3. typedef long long ll;
  4. const int N = 1919810;
  5. int n, a[N], b[N];
  6. int main()
  7. {
  8. file("nj");
  9. scanf("%d", &n);
  10. for (int i=1; i<=n; i++) scanf("%d", a+i);
  11. for (int i=1; i<=n; i++) scanf("%d", b+i);
  12. sort(a+1, a+1+n); sort(b+1, b+1+n);
  13. ll ans = 0;
  14. for (int i=1; i<=n; i++) ans += 1ll * a[i] * b[i];
  15. printf("%lld\n", ans);
  16. return 0;
  17. }

D. 排列

复读题解.bmp

我们称两个位置 \((p, q)\) 为好的,当且仅当 \((p, q)\) 不为 \((1,2),(1,4), (3,4)\) 中的任意一个 .

如果排列 \(\{a\}\) 中存在两个位置 \(p,q\) 使得 \((p,q),(a_p,a_q)\) 均为好二元组,则显然剩下的两个数在位置上和值域上都不连续,于是它俩的选择就独立了 .

于是问题变成了快速求位置在 \([l_1, r_1]\) 且值在 \([l_2, r_2]\) 中的数,二维前缀和即可 .

可以发现除了特殊排列 2413 和 3142,都是可以找到一组 \(p,q\) 的 .

这两种其实是本质相同的(reverse 一下就得到另一个了),所以下面以 2413 为例说明 .

考虑枚举 3,4 的位置,那么问题就变成在某位前面找一个数,后面找一个数,要求前面比后面大的方案数,直接前缀和即可 .

时间复杂度 \(O(n^2)\) .

  1. using namespace std;
  2. const int N = 2e3 + 233;
  3. typedef pair<int, int> pii;
  4. typedef long long ll;
  5. int n;
  6. ll a[15], b[N], s[N][N];
  7. ll sum(int i, int vl, int vr){return s[i][vr] - s[i][vl - 1];}
  8. ll S(int l, int r, int p, int q, int vl, int vr)
  9. {
  10. if (p) return sum(r, 1, vl-1) - sum(l-1, 1, vl-1);
  11. if (q) return sum(r, vr+1, n) - sum(l-1, vr+1, n);
  12. return sum(r, vl+1, vr-1) - sum(l-1, vl+1, vr-1);
  13. }
  14. ll solve(int p, int q, int r, int s)
  15. {
  16. ll ans = 0; int L = min(a[p], a[q]), R = max(a[p], a[q]);
  17. for (int i=1; i<=n; i++)
  18. for (int j=i+1; j<=n; j++)
  19. if ((b[i] < b[j]) == (a[p] < a[q]))
  20. {
  21. int vl = min(b[i], b[j]), vr = max(b[i], b[j]);
  22. ans += ((r == 1) ? S(1, i-1, a[r]<L, a[r]>R, vl, vr) : S(i+1, j-1, a[r]<L, a[r]>R, vl, vr)) *
  23. ((s == 4) ? S(j+1, n, a[s]<L, a[s]>R, vl, vr) : S(i+1, j-1, a[s]<L, a[s]>R, vl, vr));
  24. }
  25. return ans;
  26. }
  27. int main()
  28. {
  29. file("d");
  30. scanf("%d%lld%lld%lld%lld", &n, a+1, a+2, a+3, a+4);
  31. for (int i=1; i<=n; i++) scanf("%lld", b+i);
  32. for (int i=1; i<=n; i++)
  33. for (int j=1; j<=n; j++) s[i][j] = s[i-1][j] + (b[i] <= j);
  34. auto check = [=](int x, int y, int l, int r) -> bool
  35. {
  36. if (l > r) swap(l, r);
  37. return ((a[x]>l) != (a[y]>l)) || ((a[x]>r) != (a[y]>r));
  38. };
  39. if (check(1, 4, a[2], a[3])){printf("%lld\n", solve(2, 3, 1, 4)); return 0;}
  40. if (check(2, 4, a[1], a[3])){printf("%lld\n", solve(1, 3, 2, 4)); return 0;}
  41. if (check(1, 3, a[2], a[4])){printf("%lld\n", solve(2, 4, 1, 3)); return 0;}
  42. if (a[1] == 3) // 3142
  43. {
  44. reverse(a+1, a+5); reverse(b+1, b+1+n);
  45. for (int i=1; i<=n; i++)
  46. for (int j=1; j<=n; j++) s[i][j] = s[i-1][j] + (b[i] <= j); // !!!!!!!!!
  47. } swap(a[3], a[4]);
  48. ll ans = -solve(1, 3, 2, 4);
  49. for (int i=1; i<=n; i++)
  50. for (int j=i+1; j<=n; j++)
  51. if (b[i] < b[j]) ans += (s[n][b[i]] - s[j][b[i]]) * (sum(n, b[i], b[j]) - sum(j, b[i], b[j]));
  52. printf("%lld\n", ans);
  53. return 0;
  54. }

叫高二上一调?简要题解 (ACD)的更多相关文章

  1. BJOI2018简要题解

    BJOI2018简要题解 D1T1 二进制 题意 pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是 \(3\) 的倍数.他想研究对于二进制,是否也有类似的性质. 于是他生 ...

  2. Noip 2014酱油记+简要题解

    好吧,day2T1把d默认为1也是醉了,现在只能期待数据弱然后怒卡一等线吧QAQ Day0 第一次下午出发啊真是不错,才2小时左右就到了233,在车上把sao和fate补掉就到了= = 然后到宾馆之后 ...

  3. HNOI2018简要题解

    HNOI2018简要题解 D1T1 寻宝游戏 题意 某大学每年都会有一次 Mystery Hunt 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为 ...

  4. JXOI2018简要题解

    JXOI2018简要题解 T1 排序问题 题意 九条可怜是一个热爱思考的女孩子. 九条可怜最近正在研究各种排序的性质,她发现了一种很有趣的排序方法: Gobo sort ! Gobo sort 的算法 ...

  5. CQOI2018简要题解

    CQOI2018简要题解 D1T1 破解 D-H 协议 题意 Diffie-Hellman 密钥交换协议是一种简单有效的密钥交换方法.它可以让通讯双方在没有事先约定密钥(密码)的情况下,通过不安全的信 ...

  6. AtCoder ExaWizards 2019 简要题解

    AtCoder ExaWizards 2019 简要题解 Tags:题解 link:https://atcoder.jp/contests/exawizards2019 很水的一场ARC啊,随随便便就 ...

  7. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

  8. HNOI2019 简要题解

    HNOI 2019 简要题解 没想到自己竟也能有机会写下这篇题解呢. LOJ Luogu Day1T1 鱼 枚举\(AD\)两点后发现\(BC\)与\(EF\)相对独立,因此只需要计算合法的\(BC\ ...

  9. A · F · O —— JLOI2018翻车记(附Day1简要题解)

    JLOI2018翻车记 并不知道该怎么写... 算了还是按照标准剧情来吧 这应该是一篇写得非常差的流水账... 2018.04.04 Day -1 省选前在机房的最后一天. 压力并不是很大,毕竟联赛 ...

随机推荐

  1. join方法原理

    join()方法--原理同wait方法 如果不知道保护性暂停是啥的可以参考一下上一篇文章 https://www.cnblogs.com/duizhangz/p/16222854.html join方 ...

  2. EF Core 配置模型

    0 前言 本文的第一节,会概述配置模型的作用(对数据模型的补充描述). 第二节描述两种配置方式,即:数据注释(data annotations)和 Fluent API 方式. 第三节开始,主要是将常 ...

  3. 透过实例demo带你认识gRPC

    摘要:gRPC是基于定义一个服务,指定一个可以远程调用的带有参数和返回类型的的方法.在服务端,服务实现这个接口并且运行gRPC服务处理客户端调用. 本文分享自华为云社区<gRPC介绍以及spri ...

  4. grpc-java源码环境编译

    1. Clone 1.1 git clone https://github.com/grpc/grpc-java.git 1.2 idea 打开grpc-java工程 2.compile 2.1 ja ...

  5. Linux系统下运行.sh文件

    在Linux系统下运行.sh文件有两种方法,比如我在root目录下有个vip666.sh文件 #chmod +x *.sh的文件名 #./*.sh的文件名 第一种(这种办法需要用chmod使得文件具备 ...

  6. python requires模块 https请求 由于TLS协议版本太高导致错误

    错误提示 requests.exceptions.SSLError: HTTPSConnectionPool(host='air.cnemc.cn', port=18007): Max retries ...

  7. JS:String

    String数据类型:字符串 字符串是存储字符的变量. 字符串可以是引号中(可以使用单引号或双引号)的任意文本. var a = "abc"; var b = "123& ...

  8. 【Github】 Github修改仓库的基本信息

    前言 我们通常在刚开始了解学习使用github时,一般都是测试的使用,有时我们向里面添加了一些代买,如果想要修改信息并且是删除仓库重新创建提交,可以采用下面方法修改仓库信息,名称.描述等. 修改仓库描 ...

  9. js 生成的html class属性失效问题

    var html = '<fieldset class="struct-info" id="SlopeZY"><legend>变坡点(Z ...

  10. 搭建zabbix及报错处理

    搭建ZABBIX服务器准备工作 1.需要服务器是LAMP 或 LNMP 环境 2.主机名和IP要写在HOST文件里 3.iptables 和 selinux 必须关闭 一.先用最简单的方式搭建lamp ...