\(\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. SEO-------- 了解

    SEO(Search Engine Optimization) 译为:搜索引擎优化,是一种透过了解搜索引擎的运作规则来调整网站,以及提高目的的网站在有关搜索引擎内的排名方式. 目的:为了让用户更快的搜 ...

  2. 如何在yii1.0.7中设置数据库连接超时?

    继承CDbConnection, 覆盖 init()方法 在 parent::init() 之前设置 $this->setAttribute(PDO::ATTR_TIMEOUT, $this-& ...

  3. SimdJsonSharp:每秒解析千兆字节的JSON

    SimdJsonSharp: Parsing gigabytes of JSON per second C# version of lemire/simdjson (by Daniel Lemire ...

  4. [Zabbix] 安装MySQL5.7, 部署Zabbix到CentOS 7日记

    安装环境:CentOS7 64位,安装MySQL5.7 一.安装 MySQL 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads ...

  5. WPF树形菜单--递归与非递归遍历生成树结构的集合

    一.新建了WPF项目作为测试,使用TreeView控件进行界面展示. 第一步创建实体类TreeEntity: public class TreeEntity { private int _mid; p ...

  6. java基于NIO的分散读取文件,然后统一聚合后写入文件

    分散读取:对于一个文件,可以分散的读取数据,可以快速的读取,好比多个线程在分段同时读取: 聚合写入:为了提高效率,一般读取到的数据都是分散的,要快速写入,就需要把分散的数据聚集在一起,然后一块写入到文 ...

  7. 对try catch finally的理解

    对try catch finally的理解1.finally  总是会运行的,即使在catch中thorw抛出异常了. 2.finally 在 return后没有结束,而是继续运行finally 2. ...

  8. Java生鲜电商平台-物流动态费率、免运费和固定运费设计与架构

    Java生鲜电商平台-物流动态费率.免运费和固定运费设计与架构 说明:物流配送环节常见的有包邮,免运费,或者偏远地区动态费率,还存在一些特殊的情况,固定费率,那么如何进行物流的架构与设计呢? 运费之困 ...

  9. java中设置session过期时间

    Web容器 apache-tomcat-8.0.26\conf\web.xml中设置 <session-config> <!-- 时间单位为分钟 --> <session ...

  10. 史上最全的Spring Boot Cache使用与整合

    一:Spring缓存抽象# Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接 ...