题目链接 https://atcoder.jp/contests/agc036/tasks/agc036_d 题解 这都是怎么想出来的啊..目瞪口呆系列.. 第一步转化至关重要: 一张图中不存在负环意味着什么? 不存在负环就存在最短路,我们可以给每个点分配一个权值\(p_i\)(相当于从\(1\)号到该点的最短路,点从\(1\)开始标号)满足对于任何边\((i,j)\)有\(p_j\ge p_i+w(i,j)\). 然后我们令\(q_i=p_i-p_{i+1}\), 那么由于边权都是\(1\)或…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 N 个点的有向带权图,从 0 编号到 N - 1.一开始这张图有 N - 1 条边,第 i 条边连接点 i 与点 i+1,边权为 0. 接着往这张图加边:对于每一对 (i, j)(i ≠ j),连 i -> j,当 i < j 时边权为 -1:否则边权为 1. 我们想要删掉一些边 (i, j)(i ≠ j),使得这张图不存在负环.删掉边 (i, j)…
Atcoder Grand Contest 036 D - Negative Cycle 解题思路 在某些情况下,给一张图加或删一些边要使图合法的题目要考虑到最短路的差分约束系统.这一题看似和最短路没什么关系,但有一个不那么经典的推论,对于一个点 \(u\) 不在负环上的一个充要条件是 \[ \forall_{\text{Edge }v\rightarrow u} dis(S,v)+weight(v, u)\geq dis(S,u) \] 其中 \(S\) 是图中任意与 \(u\) 联通的一点.…
神仙题?反正我是完全想不到哇QAQ 这场AGC真的很难咧\(\times 10086\) \(\bf Description\) 一张 \(n\) 个点的图,\(i\) 到 \(i+1\) 有连边. 现在来了个Snuke,他会给所有 \((i,j) ,i \ne j\) 连边,如果 \(i<j\) ,边权为 \(-1\) ,否则为 \(1\) . 然鹅Ringo不想要图里有负环,所以他会删去Snuke加的一些边,使得图中没有负环,删除一条边有个代价,问最小的删边代价.\(3 \leq n \le…
题目链接: http://poj.org/problem?id=1112 题目大意: 有编号为1~n的n个人,给出每个人认识的人的编号,注意A认识B,B不一定认识A,让你将所有的人分成两组,要求每组的人相互认识,且两组的人数要尽可能的接近. 求出每组的人的编号. 解题思路: 图论+背包(输出物品). 相互认识的关系不好确定分组,如果转换思路,考虑相互不认识的情况就简单好多,如果A不认识B,且B不认识C,那么A和C必须分到同一组里.所以就想到了,连通分量的染色,相邻的两个染不同的颜色(0或1),每…
B - Frog 2 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There are NN stones, numbered 1,2,…,N1,2,…,N. For each ii (1≤i≤N1≤i≤N), the height of Stone ii is hihi. There is a frog who is initially on Stone 11. He will…
A - Frog 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There are NN stones, numbered 1,2,…,N1,2,…,N. For each ii (1≤i≤N1≤i≤N), the height of Stone ii is hihi. There is a frog who is initially on Stone 11. He will…
正解:图论(最短路)+dp(记忆化搜索) 解题报告: 这题真的是个好东西! 做了这题我才发现我的dij一直是错的...但是我以前用dij做的题居然都A了?什么玄学事件啊...我哭了TT 不过其实感觉还挺幸运的,好歹是考前发现?不然考完才知道就GG了... 先正儿八经讲完解法再吐槽自己... 先dij跑一遍最短路 然后再走一遍,我们可以跑到d+k相当于我们可以浪费k 然后dp[i][j]表示跑到第i个点了还可以浪费j的方案数 最后Σdp[n][1~k]就欧克辽... 就是个记忆化搜索 对了了解到好…
题目链接:http://arc074.contest.atcoder.jp/tasks/arc074_c 题意:一共有3种颜色,红色,绿色,蓝色.给出m个要求l,r,x表示在区间[l,r]内要有x种不同的颜色. 问满足所有要求的染色方式一共有几种. 题解:一般问一共有几种组合方式要么推数学公式,要么就是dp. 不妨设dp[r][g][b]表示是k=max(r,g,b)前k个染色后r色结尾的位置为r,g色结尾的位置为g,b色结尾的位置为b. 显然转移为dp[k+1][g][b]+=dp[r][g]…
题目链接 https://atcoder.jp/contests/agc019/tasks/agc019_e 题解 tourist的神仙E题啊做不来做不来--这题我好像想歪了啊= =-- 首先我们可以考虑,什么样的操作序列才是合法的? 有用的位置只有两种,一种是两个序列在这个位置上都是1, 称作11型,另一种是一个0一个1, 称作01型.设两种位置分别有\(A\)个和\(2B\)个. 考虑一个操作序列,交换两个11型相当于没交换,每个11型只会被交换两次,每个01型只会被交换一次.这也就是说,如…
题目 令\(dp_{i,j}\)表示从点1到达点i,路径长度为j的方案数.转移为\(dp_{i,j}=\sum_{(i,v,w)\in E}dp_{v,j-w}p_{i,v,w}\). 显然只能从长度小的转移到长度大的,而且转移是一个自己和自己卷积的形式.考虑分治FFT,当分治到\((l,r)\)时,考虑\(dp_{i,t1} \to dp_{j,t2}(l \leq t1 \leq mid,mid < t2 \leq r)\)的转移.枚举i和j(i,j之间存在边),把\(dp_{i,t1}(l…
D. Vitaly and Cycle Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/557/problem/D Description After Vitaly was expelled from the university, he became interested in the graph theory. Vitaly especially liked the cycles of an…
见题: 看一眼,就知道是个依赖性背包,于是乎就草草的打了树上DP,一交发现才20,仔细检查也没错呀,忍不住点了题解,只喵一眼看到了强联通缩点等的字样,又重新审了一遍题,发现这句话理解有偏差:软件i只有在安装了软件j(包括软件j的直接或间接依赖).题目并未说i依赖j时,j就不能依赖i了,所以就形成了环了. 代码: #include<bits/stdc++.h> #define max(a,b) (((a)>(b))?(a):(b)) #define min(a,b) (((a)<(b…
题意:你是某个岛国(ACM-ICPC Japan )上的一个苦逼程序员,你有一个当邮递员的好基友利腾桑遇到麻烦了:全岛有一些镇子通过水路和旱路相连,走水路必须要用船,在X处下船了船就停在X处.而且岛上只有一条船,下次想走水路还是得回到X处才行:两个镇子之间可能有两条以上的水路或旱路:邮递员必须按照清单上的镇子顺序送快递(镇子可能重复,并且对于重复的镇子不允许一次性处理,比如ABCB的话B —定要按顺序走两次才行).测试数据有多组:N Mxl yl tl sllx2 y2 t2 sl2XM yM…
传送门 dp妙题啊. 我认为DZYODZYODZYO已经说的很好了. 强制规定球的排序方式. 然后就变成了一个求拓扑序数量的问题. 代码: #include<bits/stdc++.h> using namespace std; inline int read(){ int ans=0,w=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();} while(isdigit(ch))ans=(ans<…
#include<bits/stdc++.h>using namespace std;int a[200007];int b[200007];long long dp[200007];long long sum[200007];const long long mod =1e9+7;int main(){    dp[0]=1;    int n;    scanf("%d",&n);    for(int i=1;i<=n;i++)        scanf(…
题目链接 https://atcoder.jp/contests/agc038/tasks/agc038_d 题解 orz zjr神仙做法 考虑把所有\(C_i=0\)的提示的两点连边,那么连完之后的每个连通块都是一棵树 那么同一连通块内就不能出现\(C_i=1\)的提示,然后不同连通块之间可以任意连边,但是要满足两个连通块之间只能连一条边,还要连通 设有\(c\)个连通块,那么就要在连通块之间连\(m-(n-c)\)条边 如果没有\(C_i=1\)的提示,就只要求\(c-1\le m-(n-c…
题目链接 https://atcoder.jp/contests/agc022/tasks/agc022_c 题解 大水题一道 就他给的这个代价,猜都能猜到每个数只能用一次 仔细想想,我们肯定是按顺序从大到小用,一个数用多次肯定没意义,于是证完了 并且所有元素独立 所以我们就是要从大到小贪心判断每个元素是否能不用 比如当前要判断\(x\)是否能不用,那么就判断用当前已经确定要用的集合并上所有小于\(x\)的数能不能达到目的 这个东西建个图判一下连通性就行了 时间复杂度\(O(N^4)\) 代码…
题目传送门(内部题109) 输入格式 第一行,两个整数$n,m$. 接下来$m$行,每行三个整数$u,v,l$,描述了一条道路连接的两个路口的编号以及道路的长度. 输出格式 输出一行一个整数,为所求的答案.若小$A$不能到$n$达号点,输出$-1$. 样例 样例输入: 4 41 2 12 3 13 4 11 4 1 样例输出: 数据范围与提示 对于$10\%$的数据,满足$n\leqslant 200,m\leqslant 1,000$ 对于$70\%$的数据,满足$n\leqslant 1,0…
题意: 给你一个n行m列由'#'和'.'构成的矩阵,你需要从(1,1)点走到(n,m)点,你每次只能向右或者向下走,且只能走'.'的位置. 你可以执行操作改变矩阵: 你可以选取两个点,r0,c0;r1,c1.以(r0,c0)为小矩阵左上角坐标,以(r1,c1)为小矩阵右下角坐标.你要把这个小矩阵中的所有字符反转(也就是原来是'#'的,要变成'.',原来是'.'的,要变成'#') 题解: 对于样例 3 3 .## .#. ##. 我们可以看成反转之后的矩阵最终从(1,1)走到(n,m)的只有一条路…
Codeforces 题目传送门 & 洛谷题目传送门 一道线性基的综合题 %%%%%% 首先注意到"非简单路径""异或和"等字眼,可以本能地想到线性基.根据线性基那一套理论,一个值 \(v\) 可以表示为某个 \(1\to 1\) 的非简单回路上边权的异或和当前节点它可以表示为 \(1\) 所在连通块的若干个 \(\ge 1\) 简单环上权值的异或和.其次我们还可以注意到本题至于很小,最高不过 \(2^5-1=31\),而稍微打个表即可发现大小为 \(5\)…
传送门 输入一个序列an" role="presentation" style="position: relative;">anan,输入k" role="presentation" style="position: relative;">kk. 如果对于所有包含ai" role="presentation" style="position: relati…
C. Sum Balance Ujan has a lot of numbers in his boxes. He likes order and balance, so he decided to reorder the numbers. There are…
Description: 给 \(n\) 个点的图,点有点权 \(a_i\) ,两点之间有边当且仅当 \(a_i\ \text{and}\ a_j \not= 0\),边权为1,求最小环. Solution: 按每一位考虑若当前这一位为 1 的点超过了 2 个,那么答案就为 3 . 否则只会连一条边,于是最多只有 \(60\) 条边,枚举每条边删掉,求最短路 (边权为1,bfs) 即可. #include <iostream> #include <set> #include <…
#definde HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> using namespace std; ]; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>s+; ); ; for(int i=n;i;--i){ ]<') ans+=s[i]-'; else{ ans+=-(s[i]-'); ++s[i-]; } } ])…
#include<bits/stdc++.h>using namespace std;const long long mod = 998244353;string s;int a[300007];long long x[7],y[7];int main(){ int n; cin>>n; cin>>s; int len=s.size(); for(int i=0;i<len;++i){ if(s[i]=='B') a[i]=1; else if(s[i]=='G'…
\(\mathcal{Descriprtion}\)   Link.   在一个含 \(n\) 个结点的有向图中,存在边 \(\lang i,i+1,0\rang\),它们不能被删除:还有边 \(\lang i,j,-1\rang~(i<j)\) 和 \(\lang i,j,1\rang~(i>j)\),删除一条边的代价为 \(a_{i,j}\).求使得图无负环的最小删边代价和.   \(n\le500\). \(\mathcal{Solution}\)   直接将原图看做一个差分约束模型,或…
[UR #20]跳蚤电话 将加边变为加点,方案数为 \((n-1)!\) 除以一个数,\(dp\) 每种方案要除的数之和即可. 点击查看代码 #include<bits/stdc++.h> using namespace std; int n; int ver[200005],ne[200005],head[100005],cnt; inline void link(int x,int y){ ver[++cnt]=y; ne[cnt]=head[x]; head[x]=cnt; } cons…
Preface 这篇已经鸽了好久的说,AGC037都打完了才回来补所以题目可能都记不大清楚了,如有错误请指正 这场感觉难度远高于上一场,从D开始就不会了,E没写(看了题解都不会写),F就是抄曲明姐姐的 我还是太弱了 A - Triangle 刚开始想了一堆很SB的做法,后来才想到用叉积来解决 考虑构造向量\((a,b),(c,d)\),同时定下一个点在原点处,此时的三角形面积就是\(ad-bc\) 可以考虑像CXRdalao一样取一个底数\(10^9\)构造,也可以像我一样先随便搞出一个\(ad…
从这里开始 比赛目录 Problem A Triangle 考虑把三角形移到和坐标轴相交,即 然后能够用坐标比较简单地计算面积,简单构造一下就行了. Code #include <bits/stdc++.h> using namespace std; typedef bool bolean; #define ll long long const int V = 1e9; ll S; int main() { scanf("%lld", &S); if (S == 1…