\(\rm Link\)

然而泥萌没有权限是看不了题目的233.

\(\rm T1\)

大概就是个map,脑残出题人认为(x,x)不属于有序二元组,我可qtmd。于是只拿了\(\rm 60pts\)

int main(){
ios_base :: sync_with_stdio(false) ;
cin.tie(0), cout.tie(0) ; cin >> N >> P ; int i ;
for (i = 1 ; i <= N ; ++ i) cin >> base[i], base[i] %= P ;
for (i = 1 ; i <= N ; ++ i) if (base[i]) M[expow(4 * base[i] % P, P - 2)] ++ ;
for (i = 1 ; i <= N ; ++ i){
int now = 1ll * base[i] * base[i] % P ;
ans += M[now] ; if (4ll * now % P * base[i] % P == 1) -- ans ;
}
cout << ans << endl ; return 0 ;
}

\(\rm T2\)

先说自己的做法。

发现其实就是在凑一个式子:

\[\frac{\sum a_ik_i}{M\sum k_i}=\frac{N}{M}
\]

然后稍微变个形:

\[\sum a_ik_i=N\cdot \sum k_i
\]

于是发现只要暴力背包就完了,最后判断一下\(f_{k,N}\)是不是\(=k\)就做完了。

int main(){
cin >> K >> N >> M ; int i, j ; dp[0] = 0 ;
for (i = 1 ; i <= K ; ++ i) cin >> base[i] ;
for (i = 1 ; i <= N * N ; ++ i) dp[i] = Inf ;
for (i = 1 ; i <= K ; ++ i)
for (j = base[i] ; j <= N * N ; ++ j)
dp[j] = min(dp[j - base[i]] + 1, dp[j]) ;
for (i = 1 ; i <= N ; ++ i) if (dp[i * N] == i) return cout << i, 0 ;
return -1 ;
}

于是获得了\(\rm 70pts\)……但是用头想一想,发现并不对。因为可能\(f_{k,N}\)这个状态的\(\rm cost\)可能是5,但是背包转移的时候只能记录最优状态,于是假设会记录4,那这个状态就挂掉了……对每个状态都开了个std :: set发现T掉了……

正解是BFS。

考虑把式子转化一下,就变成了

\[\sum k_i(a_i-N)=0
\]

大概就是考虑用已经凑出的和当做状态,那么实际上是在找一个环。于是每次转移的时候枚举放哪个新物品(新物品权值为\(a_i-N\))就完了。

#define MAX 50000
cin >> K >> N >> M ; q.push(MAX) ; vis[MAX] = 1 ; int i ;
for (i = 1 ; i <= K ; ++ i) cin >> base[i], base[i] -= N ;
while (!q.empty()){
int now = q.front() ; q.pop() ;
if (now > M + MAX) continue ;
for (i = 1 ; i <= K ; ++ i){
if (now + base[i] == MAX){
cout << ans[now] + 1 << endl ;
return 0 ;
}
else if (!vis[now + base[i]])
vis[now + base[i]] = 1, ans[now + base[i]] = ans[now] + 1, q.push(now + base[i]) ;
}
}
cout << -1 << endl ;

正 解 暴 力, 菜 鸡 退 役。

\(\rm T3\)

sb题,每个连通块都产生\(\rm 1\)的贡献当且仅当没有任何一个连通块是树。

于是就变成了找树的问题……忘记前驱思考了nm老久,趁早退役算了= =

void dfs(int now, int pre){
vis[now] = 1 ;
for (int k = head[now] ; k ; k = E[k].next){
if (to(k) == pre) continue ;
if (to(k) == now) continue ;
if (!vis[to(k)]) dfs(to(k), now) ; else ++ o ;
}
}
int main(){
cin >> N ; int i ; p = 1 ;
for (i = 1 ; i <= N ; ++ i) fa[i] = i ;
for (i = 1 ; i <= N ; ++ i) cin >> base[i], add(i, base[i]) ;
for (i = 1 ; i <= N ; ++ i) if (fa[i] == i) ++ ans ;// cout << ans << endl ;
for (i = 1 ; i <= N ; ++ i) if (!vis[i]) o = 0, dfs(i, 0), p = min(o, p) ;
if (p) cout << ans << endl ; else cout << ans - 1 << endl ;

\(\rm T4\)

BZOJ4160.

不可做题233

题面:

给定一张无向图,求给这张图定向成\(\rm DAG\)之后最长路最短是多少。\(n\leq 16\)

\(\rm{Sol~1}\)

考虑直接\(dp\)。\(f_{s,u,v}\)表示考虑了点集\(s\),最长路端点是\(u,v\)的最小值。每次转移的时候枚举\(u,v,w\),从\((u,v),(v,w)\)两个状态转移到\((u,w)\)。复杂度\(O(3^nn^3)\)

1h没调出来

\(\rm Sol~2\)

考虑证明一个二级定理:

定理 \(1.1\)

  • 一张无向图定向成的\(\rm DAG\),当其最长路最短时,其最长路为\(\rm X-1\),其中\(\rm X\)表示不连通集覆盖数。也就是对于一张有向图图\(\rm \{V,E\}\),定义一种划分\(P\),使得划分出的每个集合中所有点不连通。

考虑一种证明:

  • 首先一定有\(\rm X-1\geq maxL\)。因为其上的每个点是连通的。
  • 其次我们考虑,如果每次删除全部出度为\(0\)点,放到一个集合里,那么一定合法,并且可以满足\(\rm X=maxL+1\)。

但其实这东西也可以直接用\(\rm dilworth\)定理的对偶定理证出来:

定理 \(2.1\)(\(\rm dilworth\)定理)

令\(\rm (X,≤)\)是一个有限偏序集,并令\(m\)是反链的最大的大小。则\(\rm X\)可以被划分成\(m\)个但不能再少的链。

对偶一下:

定理 \(2.2\):

令\(\rm (X,≤)\)是一个有限偏序集,并令\(r\)是其最大链的大小。则\(X\)可以被划分成\(r\)个但不能再少的反链。

然后”反链“连接的是”不可比的点“,也就是本题中”不连通的点“。

于是我们就可以快乐地状压了。

int *g, *f ;
int main(){
cin >> N >> M ;
memset(f, 63, sizeof(f)) ;
int u, v, i, j ; T = (1 << N) - 1 ;
for (i = 1 ; i <= M ; ++ i)
cin >> u >> v, -- u, -- v, E[u] |= (1 << v), E[v] |= (1 << u) ;
f[0] = 0, g[0] = 1 ;
for (i = 0 ; i <= N ; ++ i) Sz[1 << i] = i ;
for (i = 1 ; i <= T ; ++ i){
j = (i & (-i)) ;
if (!g[i ^ j]) continue ;
if (E[Sz[j]] & (i ^ j)) continue ;
g[i] = 1 ;
}
for (i = 1 ; i <= T ; ++ i)
for (j = i ; j ; j = (j - 1) & i)
if (g[j]) f[i] = min(f[i], f[i ^ j] + 1) ;
cout << f[T] - 1 << endl ; return 0 ;
}

[题解向] 正睿Round409的更多相关文章

  1. [题解向] 正睿Round435

    10.14 Link 唔,这一场打得不好.获得了\(\rm 75pts/300pts\)的得分,但是居然可以获得\(\rm 27/69\)的名次,也不至于不满意--毕竟是真不会233 \(\rm T1 ...

  2. 11.6 正睿停课训练 Day17

    目录 2018.11.6 正睿停课训练 Day17 A chinese(思路 计数) B physics(单调队列/剪枝 DP) C chemistry(期望 DP) 考试代码 A B C 2018. ...

  3. 8.10 正睿暑期集训营 Day7

    目录 2018.8.10 正睿暑期集训营 Day7 总结 A 花园(思路) B 归来(Tarjan 拓扑) C 机场(凸函数 点分治) 考试代码 A B C 2018.8.10 正睿暑期集训营 Day ...

  4. 10.31 正睿停课训练 Day13

    目录 2018.10.31 正睿停课训练 Day13 A Poker(期望) B Label(高斯消元) C Coin(二分图染色 博弈) 考试代码 A(打表) B 2018.10.31 正睿停课训练 ...

  5. 11.5 正睿停课训练 Day16

    目录 2018.11.5 正睿停课训练 Day16 A 道路规划(思路) B 逻辑判断(枚举 位运算/DP 高维前缀和) C 区间(贪心/树状数组) 考试代码 A B C 2018.11.5 正睿停课 ...

  6. 11.2 正睿停课训练 Day15

    目录 2018.11.2 正睿停课训练 Day15 A 郁闷的小G(二分) B 小G的树(树形DP) C 数的距离(思路) 考试代码 B C 2018.11.2 正睿停课训练 Day15 时间:3.5 ...

  7. 11.1 正睿停课训练 Day14

    目录 2018.11.1 正睿停课训练 Day14 A 字符串 B 取数游戏(贪心) C 魔方(模拟) 考试代码 B C 2018.11.1 正睿停课训练 Day14 时间:3.5h 期望得分:100 ...

  8. 10.29 正睿停课训练 Day11

    目录 2018.10.29 正睿停课训练 Day11 A 线段树什么的最讨厌了(思路 DFS) B 已经没有什么好害怕的了(差分 前缀和) C 我才不是萝莉控呢(DP 贪心 哈夫曼树) 考试代码 A ...

  9. 10.30 正睿停课训练 Day12

    目录 2018.10.30 正睿停课训练 Day12 A 强军战歌(DP 树状数组 容斥) B 当那一天来临(思路) C 假如战争今天爆发(贪心) 考试代码 B C 2018.10.30 正睿停课训练 ...

随机推荐

  1. sierpinski地毯(II)

    今天又是因为可以用py而高兴的一天. 继续咱的sierpinski地毯计划. 二,随机算法 在二十年前,磁盘容量以MB还是KB计的时候,分形解决计图的问题确实有很大的优势.存至多十来个数就好了.我要在 ...

  2. C# 中如何创建异步平行任务?

    解释都在代码里,直接贴代码了: private async void btnStartRequestResource_Click(object sender, EventArgs e) { ShowA ...

  3. dedecms5.7的获取本文章的TAG

    tag调用标签如下: {dede:tag row='10' getall='1' sort='month'} <li><a href='[field:link/]'>[fiel ...

  4. RFC的远程调用-异步

    接上篇RFC的远程调用-同步(https://www.cnblogs.com/BruceKing/p/11169930.html). TABLES:USR21. DATA:A TYPE USR21-P ...

  5. js 复制 标签中的内容 方法

    <span id='id'>hello world</span><input type='button' onClick='copy("id")' v ...

  6. C# based on PdfSharp to split pdf files and get MemoryStream C#基于PdfSharp拆分pdf,并生成MemoryStream

    install-package PdfSharp -v 1.51.5185-beta using System; using PdfSharp.Pdf; using System.IO; using ...

  7. RabbitMQ系列(一)rabbitmq简介

    ------------恢复内容开始------------ 参考:https://www.cnblogs.com/vipstone/p/9275256.html RabbitMQ简介 在介绍Rabb ...

  8. linux桌面系统的约定

    linux系统的桌面系统基本遵循同样的约定. mime类型 在linux下,关于文件类型的信息通常放在/usr/share/mime./usr/local/share/mime和用户目录下,所有应用程 ...

  9. 第七篇Scrum冲刺博客

    第七篇Scrum冲刺博客 一.站立式会议 提供当天站立式会议照片一张 二.每个人的工作 成员 已完成工作 明天计划完成的工作 遇到的困难 林剑峰 加入搜索页面 无 陆君健 校园卡匹配功能的实现 无 石 ...

  10. fetch的常见问题及其解决办法

    摘要: 玩转fetch. 作者:wonyun 原文:fetch使用的常见问题及其解决办法 Fundebug经授权转载,版权归原作者所有. 首先声明一下,本文不是要讲解fetch的具体用法,不清楚的可以 ...