Wannafly Camp 2020 Day 3C 无向图定向】的更多相关文章

请你把无向图的每条边确定一个方向,使之成为一个DAG,并且最小化最长路的长度. #include <bits/stdc++.h> using namespace std; int n,m,t1,t2,color[20],cnt,g[20][20],ans=0x3f3f; bool check(int p,int c) { int flag = 1; for(int i=1;i<=n;i++) { if(g[p][i] && color[i]==c) { flag = 0;…
给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成树的权值和. Solution 很容易想到,设 \(G_1\) 中每条边的权值,这条边在 \(G_2\) 中出现则权值为 \(1\),否则权值为 \(0\). 现在就真的是求所有生成树的边权和的权值和了. 然而标准的 Matrix-Tree Theorem 求的是生成树的边权积的和. 现在我们定义每…
定义一张无向图 G=⟨V,E⟩ 是 k 可染色的当且仅当存在函数 f:V↦{1,2,⋯,k} 满足对于 G 中的任何一条边 (u,v),都有 f(u)≠f(v). 定义函数 g(n,k) 的值为所有包含 n 个点的无自环.无重边的 k 可染色无向图中的边数最大值.举例来说,g(3,1)=0,g(3,2)=2,g(3,3)=3. 现在给出三个整数 n,l,r,你需要求解:(\sum_{i=l}^rg(n,i))mod998244354 Solution 把 \(n\) 个点分成 \(m\) 份,尽…
有一个猜奖者和一个主持人,一共有 \(n\) 扇门,只有一扇门后面有奖,主持人事先知道哪扇门后有奖,而猜奖者不知道.每一轮,猜奖者选择它认为的有奖概率最大(如果有多个最大,随机选一个)的一扇门,主持人从剩下的且门后没有奖的门中随机打开一扇.直到剩两扇门时,猜奖者做出的选择就是他最后的选择. 现在由你来安排主持人每次打开哪一扇门,猜奖者不知道有内幕,他还认为主持人是从可以打开的门中随机一扇打开.你要使猜奖者获奖概率最低,求这个概率. (Discover Probability,你的快乐老家 ) S…
有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方案,使得各段的权值和最小. \(n \leq 10^5, k \leq min(n,20), a_i \leq n\) 设 \(f[i][j]\) 表示将 \(a_{1..j}\) 分为 \(i\) 段的最小价值,则很容易得到转移方程 \[ f[i][j]=\min (f[i-1][k]+cost(k+1…
杜教筛求 \(\phi(n)\), \[ S(n)=n(n+1)/2-\sum_{d=2}^n S(\frac{n}{d}) \] 答案为 \[ \sum_{d=1}^n \phi(d) h(\frac{n}{d}) \] 其中 \(h(n)=\sum_{i=1}^n i^2\) 顺便学习了一波 unordered_map #include <bits/stdc++.h> #include <unordered_map> using namespace std; #define i…
给定 \(n\) 个数 \(m_i\),求 \((x_1,x_2,...,x_n)\) 的个数,使得 \(x_1 \ xor\ x_2\ xor\ ...\ xor\ x_n = k\),且 \(0 \leq x_i \leq m_i\) Solution 从最高位开始看起,毫无疑问,如果 \(m_i\) 的某一位是 \(0\),那么 \(x_i\) 的这一位只能填 \(0\),所以只有那些 \(m_i\) 最高位是 \(1\) 的才具有选择权. 考虑从最高位数起,哪一位 \(pos\) 开始,…
动态维护任意两个后缀的lcp集合的mex,支持在串末尾追加字符. Solution 考虑在 SAM 上求两个后缀的 LCP 的过程,无非就是找它们在 fail 树上的 LCA,那么 LCP 长度就是这个点的 maxlen 那么在这里,当增量添加的时候,如果一个节点有了儿子,那么它就可能成为一个新的 LCP 于是我们在操作父子关系的时候暴力修改一个 bool 数组即可,答案的维护是均摊 \(O(n)\) 的 注意需要对输出 \(0\) 的情况做特判,比如这个例子 aaaabbbbab 输出的结果应…
感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memset(x,0,sizeof x) #define int long long // Init: init() !!!!! // Input: make(u,v,cap,cost) // Solver: solve(s,t) // Output: ans, cost namespace flow { const…
#include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; cout<<n<<endl; for(int i=1;i<n;i++) cout<<-i<<" "<<i+1<<endl; cout<<-n<<" "<<-n<<endl;…