C - Candies

题意

求左上角走到右下角最大的数字和。

思路

直接\(dp\)

Code

#include <bits/stdc++.h>
#define maxn 110
using namespace std;
int a[3][maxn], dp[3][maxn];
typedef long long LL;
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= 2; ++i) {
for (int j = 1; j <= n; ++j) scanf("%d", &a[i][j]);
}
for (int i = 1; i <= n; ++i) dp[1][i] = dp[1][i-1] + a[1][i];
for (int i = 1; i <= 2; ++i) dp[i][1] = dp[i-1][1] + a[i][1];
for (int j = 2; j <= n; ++j) {
dp[2][j] = max(dp[1][j], dp[2][j-1]) + a[2][j];
}
printf("%d\n", dp[2][n]);
return 0;
}

D - People on a Line

题意

给定 \(n\) 个未知数 \(x_1,...x_n\) 与 \(m\) 个等式 \(x_{p_i}-x_{q_i}=d_i\),问是否可能成立?(即是否存在矛盾)

思路

神似 poj 2492 A Bug's Life 二分图染色 || 种类并查集

对于并查集中的元素,用 \(off[\ ]\) 数组记录它比它的祖先大多少,合并的时候注意一下。

有条件$$l-fl=off[l]\ &&\ r-fr=off[r]\ &&\ r-l=d$$

于是有

\[off[fr]=fr-fl=d-off[r]+off[l]
\]

Code

#include <bits/stdc++.h>
#define maxn 100000
using namespace std;
typedef long long LL;
int fa[maxn], off[maxn];
int find(int x) {
if (fa[x] == x) return x;
int temp = fa[x];
fa[x] = find(fa[x]);
off[x] += off[temp];
return fa[x];
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) fa[i] = i;
for (int i = 0; i < m; ++i) {
int l, r, d;
scanf("%d%d%d", &l, &r, &d);
int fl = find(l), fr = find(r);
if (fl == fr) {
if (off[r] - off[l] == d) continue;
else { puts("No"); return 0; }
}
else {
fa[fr] = fl;
off[fr] = d - off[r] + off[l];
}
}
puts("Yes");
return 0;
}

E - Avoiding Collision

题意

给定一张图,甲乙两人分别从 \(s\) , \(t\) 出发,甲要到 \(t\),乙要到 \(s\),且两人均走最短路。

问在途中不相遇的方案数。

思路

跑两遍 \(dijkstra\),跑的时候记录最短路长度\(dist[\ ]\)和方案数\(way[\ ]\)。

显然,两人不能走同样的路,所以如果没有 在途中不相遇 的条件约束,则答案为 $$ans = ways1[t]*(ways1[t]-1])$$

然而,题目要求 在途中不相遇,这蕴含了两层含义,在 上不相遇,在 上不相遇。

// 千万别忘了边Orz

上不相遇:

枚举点,判断是否 $$dist1[i]2==dis\ &&\ dist2[i]2==dis$$

上不相遇:

枚举边,判断是否 $$dist1[u] + edge[id].w + dist2[v] == dis\ &&\ (dist1[u]<<1) < dis\ &&\ (dist2[v]<<1) < dis$$

用总答案减去这两部分 \(ans - ans1 - ans2\) 即为答案

Code

#include <bits/stdc++.h>
#define maxn 100010
#define maxm 200010
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
typedef long long LL;
const LL mod = 1e9 + 7;
int ne[maxn], tot;
bool vis[maxn];
LL dist1[maxn], dist2[maxn], ways1[maxn], ways2[maxn];
struct Edge { int from, to, ne; LL w; }edge[maxm<<1];
void add(int u, int v, LL w) {
edge[tot] = {u, v, ne[u], w};
ne[u] = tot++;
}
struct node {
int v; LL c;
bool operator < (const node nd) const { return c > nd.c; }
};
int n;
void dfs(int src, LL* dist, LL* ways) {
memset(vis, 0, sizeof vis);
for (int i = 1; i <= n; ++i) dist[i] = inf;
vis[src] = true; dist[src] = 0; ways[src] = 1;
priority_queue<node> q;
while (!q.empty()) q.pop();
while (true) {
for (int j = ne[src]; ~j; j = edge[j].ne) {
int v = edge[j].to;
if (vis[v]) continue;
LL now = edge[j].w + dist[src];
if (now == dist[v]) (ways[v] += ways[src]) %= mod;
else if (now < dist[v]) {
dist[v] = now; ways[v] = ways[src];
q.push({v, now});
}
}
while (!q.empty() && vis[q.top().v]) q.pop();
if (q.empty()) break;
vis[src = q.top().v] = true;
}
}
int main() {
memset(ne, -1, sizeof ne);
int m, s, t;
scanf("%d%d%d%d", &n,&m,&s,&t);
for (int i = 0; i < m; ++i) {
int u, v; LL w;
scanf("%d%d%lld", &u,&v,&w);
add(u, v, w), add(v, u, w);
}
dfs(s, dist1, ways1);
dfs(t, dist2, ways2);
assert(dist1[t] == dist2[s]);
assert(ways1[t] == ways2[s]);
LL ww = ways1[t];
LL ans = ww * (ww-1) % mod;
LL dis = dist1[t];
if (!(dis & 1)) {
LL half = dis >> 1;
for (int i = 1; i <= n; ++i) if (dist1[i] == half && dist2[i] == half) {
LL temp = ways1[i] * ways2[i] % mod;
ans = (ans - (temp * (temp-1)) % mod + mod) % mod;
}
}
for (int i = 0; i < m; ++i) {
int id = i<<1,
u = edge[id].from, v = edge[id].to;
if (dist1[u] > dist1[v]) swap(u, v);
if (dist1[u] + edge[id].w + dist2[v] == dis && (dist1[u]<<1) < dis && (dist2[v]<<1) < dis) {
LL temp = ways1[u] * ways2[v] % mod;
ans = (ans - (temp * (temp-1)) % mod + mod) % mod;
}
}
printf("%lld\n", ans);
return 0;
}

F - Number of Digits

http://www.cnblogs.com/kkkkahlua/p/8400712.html

AtCoder Regular Contest 090 C D E F的更多相关文章

  1. AtCoder Regular Contest 090 F - Number of Digits

    题目链接 Description For a positive integer \(n\), let us define \(f(n)\) as the number of digits in bas ...

  2. AtCoder Regular Contest 090

    C - Candies 链接:https://arc090.contest.atcoder.jp/tasks/arc090_a 题意:从左上角走到右下角,只能向右和向下走,问能最多能拿多少糖果. 思路 ...

  3. AtCoder Regular Contest 092 C D E F

    C - 2D Plane 2N Points 题意 二维平面上有\(N\)个红点,\(N\)个蓝点,一个红点和一个蓝点能配成一对当且仅当\(x_r<x_b\)且\(y_r<y_b\). 问 ...

  4. AtCoder Regular Contest 090 D - People on a Line

    D - People on a Line Problem Statement There are N people standing on the x-axis. Let the coordinate ...

  5. AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图

    AtCoder Regular Contest 069 F Flags 二分,2-sat,线段树优化建图 链接 AtCoder 大意 在数轴上放上n个点,点i可能的位置有\(x_i\)或者\(y_i\ ...

  6. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  7. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  8. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  9. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

随机推荐

  1. Nginx读书笔记

    ... upstream proxy_svrs { server http://192.168.1.1:8001/uri/; server http://192.168.1.2:8001/uri/; ...

  2. React学习记录一

    半路出家直接上手React,其实有点吃力,所以开始研究create-react-app,从这里下手吧. create-react-app 官方网站:https://github.com/faceboo ...

  3. nginx+django线上部署

    (一):背景在线 由于现在工作的需要,我需要使用Python来进行一个网站后台的开发,python之前接触过其语法的学习,基本的东西已经掌握,但是当时自学的时候是学得python3.5,而现在要使用p ...

  4. Python3爬取起点中文网阅读量信息,解决文字反爬~~~附源代码

    起点中文网,在“数字”上设置了文字反爬,使用了自定义的文字文件ttf通过浏览器的“检查”显示的是“□”,但是可以在网页源代码中找到映射后的数字正则爬的是网页源代码,xpath是默认utf-8解析网页数 ...

  5. python数据排序

    1.原地排序 data.sort() #对原列表进行排序 2.复制排序 data2 = sorted(data) #原列表不变,作为参数传给sorted()方法进行排序

  6. TCP/IP网络编程之网络编程和套接字

    网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...

  7. IOS开发学习笔记014-ARC机制

    ARC 1.ARC机制 2.ARC 判断准则 3.注意事项 4.ARC和非ARC混合使用 ARC机制 ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器.因此 AR ...

  8. MoveWindow() SetWindowPos()的区别与联系

    敲代码时,突然发现有一个背景图片无法显示,百思不得其解,最终发现是MoveWindow() SetWindowPos()这两个函数的使用不当造成的. 这里把这两个函数的前世今生给分析一下. 先看Mov ...

  9. 连接Oracle 10g时ORA-12514:TNS:监听进程不能解析在连接描述符中给出的SERVICE_NAME错误的解决

    近日服务器断电,导致客户端连接ORACLE服务器时出现ORA-12514错误,在网上查得解决方法如下 解决方法: 1. 打开/network/admin/listener.ora文件,找到: SID_ ...

  10. OV7725学习之SCCB协议(一)

    OV7725摄像头只能作为从机,通过SCCB协议配置内置的172个寄存器.因此首先要了解的就是SCCB总线 1.SCCB协议简述 SCCB协议有两线也有三线,两线为SIO_C与SIO_D,三线为SIO ...