kase

日记2.17(1)

感情迁移 提交于 2020-02-17 17:21:21
枚举二分图 Color Graph 题目让给无向图边刷红色,不允许奇环全红,相当于删除边,使得图中只有偶环,只有偶环即2分图,看题目数据范围容易推得是枚举题。 于是这一题就是枚举二分图左边的点 code:来自某大佬的博客: https://www.cnblogs.com/ucprer/p/11931263.html # include <bits/stdc++.h> using namespace std ; const int maxn = 105 ; const int maxm = 1e4 + 5 ; struct edge { int u , v ; } E [ maxm ] ; int tot = 0 ; void addedge ( int u , int v ) { E [ ++ tot ] . u = u ; E [ tot ] . v = v ; } int color [ maxn ] ; int main ( ) { int T ; cin >> T ; for ( int kase = 1 ; kase <= T ; kase ++ ) { int n , m ; scanf ( "%d%d" , & n , & m ) ; fill ( color , color + 1 + n , 0 ) ; tot = 0 ; for ( int i = 1 ; i

Educational Codeforces Round 76 (Rated for Div. 2)

筅森魡賤 提交于 2020-02-09 20:46:36
A. Two Rival Students (CF 1257 A) 题目大意 有 \(n\) 个学生,给定两个学生的初始站位,可以交换最多 \(k\) 次相邻学生位置,要求那两个学生相距最远,问该距离是多少? 解题思路 移到边边就好了。 神奇的代码 #include <bits/stdc++.h> #define MIN(a,b) ((((a)<(b)?(a):(b)))) #define MAX(a,b) ((((a)>(b)?(a):(b)))) #define ABS(a) ((((a)>0?(a):-(a)))) using namespace std; typedef long long LL; typedef vector<int> VI; typedef pair<int,int> PII; typedef vector<PII> VPII; typedef vector<LL> VL; typedef pair<LL,LL> PLL; typedef vector<PLL> VPLL; template <typename T> void read(T &x) { int s = 0, c = getchar(); x = 0; while (isspace(c)) c = getchar(); if (c == 45) s = 1, c = getchar();

习题:神奇的NIM游戏(数位DP&状压)

醉酒当歌 提交于 2019-12-14 04:20:18
题目 思路 神仙数位DP题目 最开始想到的是三进制状压 每一位表示这个数不变,增加还是减少 \(dp_{k,s,i,0/1}\) 表示考虑到第k位,状态为s,正在考虑第i个数,第k的异或和为0/1 这样一来, 时间复杂度就为 \(O(32*n*3^n)\) 很明显瞬间爆炸 但是我们仔细思考增加和减少 如果这个数的比他高的位数已经将后面的值整体赋值 如果是增加 那么代价就是 \(2^i\) 如果是减少呢? 代价也是 \(2_i\) 也就是说我们的状态可以转换成二进制 但是我们需要多增加一位来表示这一位是否被比他高的位数整体赋值 笔者称其为约束 \(dp_{k,s,i,0/1,0/1}\) 表示考虑到第k位,状态位s,第i个数,第s位的异或和为0/1,第i个数的第k位是否被约束 首先我们考虑DP的转移,可以发现,当前第k位的状态只与第k+1位的状态有关 也就是k我们可以滚动 第i个数也是完全没有必要的 直接修改就行了 笔者太菜直接贴了STD的代码 代码 #include <cstdio> #include <cstring> #include <algorithm> #define rep(i, x, y) for (int i = (x), _ = (y); i <= _; ++i) #define down(i, x, y) for (int i = (x), _ = (y); i