CodeForces 687A NP-Hard Problem

Portal:http://codeforces.com/problemset/problem/687/A

二分图染色 好模板题 有SPJ

值得注意的是,因为C++的奇妙的运算机制

若在vector变量x.size()=0,则x.size()-1会溢出(此处坑了我3h)

这不禁让我想起了文明2里的甘地

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<set>
 4 #include<cstdio>
 5 #include<cstdlib>
 6 #include<cmath>
 7 #include<vector>
 8 using namespace std;
 9 #define FOR(i,j,k) for(int i=j;i<=k;i++)
10 #define FORD(i,j,k) for(int i=j;i>=k;i--)
11 #define LL long long
12 #define maxn 100010
13 #define SZ(x) int(x.size())
14 int n,m,j,x,y;
15 bool flag=true;
16 vector<int> a[maxn];
17 vector<int> ans[2];
18 int col[maxn],len[maxn],vis[maxn];
19 bool dfs(int s,int color)
20 {
21     col[s]=color;
22     vis[s]=1;
23     FOR(i,0,SZ(a[s])-1)
24     {
25     if(vis[a[s][i]]) {if(col[a[s][i]]==color) return false;}
26     else if(!dfs(a[s][i],-color)) return false;
27     }
28     if(color==1) ans[0].push_back(s); else ans[1].push_back(s);
29     return true;
30 }
31 int main()
32 {
33 cin>>n>>m;
34 FOR(i,1,m)
35 {
36     cin>>x>>y;
37     a[x].push_back(y);
38     a[y].push_back(x);
39 }
40 FOR(i,1,n)
41 {
42 if(!vis[i]) if(!dfs(i,1)) flag=false;
43 }
44 if(flag)
45 FOR(i,0,1)
46 {
47     cout<<SZ(ans[i])<<endl;
48     FOR(j,0,SZ(ans[i])-1) cout<<ans[i][j]<<‘ ‘;
49     cout<<endl;
50 }
51 else cout<<-1<<endl;
52 return 0;
53 }

神奇代码

神奇的(一劳永逸的?)做法

#define SZ(x) int(x.size())

嘿嘿嘿 define大法好

时间: 2024-10-08 16:54:57

CodeForces 687A NP-Hard Problem的相关文章

Frets On Fire --- 2019 Codeforces Global Round 2 Problem D

原题:https://codeforces.com/contest/1119/problem/D 题意大概是一个n行1e18列的矩阵,其中每行第一个数为s[i],剩下的数每行依次以1的速度递增.就是说,矩阵元素 a[i][j] = s[i] + j .有q个询问,每个询问有两个参数l,r,求矩阵第l列到第r列(所有行)一共出现了几个不同的数. 这道题首先要先想到,两个参数 [l,r] 其实等价于一个参数 [0,r-l] ,也就是说矩阵第0~r-l行出现的数字的个数其实和第l-r行出现的个数是一样

http://codeforces.com/contest/575/problem/B

题目链接: http://codeforces.com/contest/575/problem/B 题解: 代码: #include<cstdio> #include<vector> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int maxn = 1e5 + 10; const int DEG = 22; const in

Codeforces 442B Andrey and Problem(贪心)

题目链接:Codeforces 442B Andrey and Problem 题目大意:Andrey有一个问题,想要朋友们为自己出一道题,现在他有n个朋友,每个朋友想出题目的概率为pi,但是他可以同时向多个人寻求帮助,不过他只能要一道题,也就是如果他向两个人寻求帮助,如果两个人都成功出题,也是不可以的. 解题思路:贪心,从概率最大的人开始考虑,如果询问他使得概率变大,则要询问. #include <cstdio> #include <cstring> #include <a

http://codeforces.com/contest/741/problem/B B. Arpa&#39;s weak amphitheater and Mehrdad&#39;s valuable Hoses

题意: 给出上限体重W 然后还给出每个人的体重wi 和 魅力值 bi 互为伙伴的对(xi, yi) 可以凑成group 思路: 并查集找出所有的group 暴力背包 对于每一个group 要选出这一组内选一个人时的最优结果, 如果所有人的体重和小于等于W,还得考虑选所有人的情况 #include <iostream> #include <string.h> #include <algorithm> #include <stdio.h> #include &l

CodeForces 776D The Door Problem【并查集】

CodeForces 776D The Door Problem[并查集]并查集 设 f 1--m 表示 开的情况 m+1--2*m 表示关的情况 对于每盏灯 如果他 是关的 则 x--y x+m--y+m 表示要同关 或者同开 如果他 是开的 则 x+m--y x--y+m 表示一个关 一个开如果一盏灯 的 x 连向 了 x+m 则表示是矛盾了 那么久是错误的 题意:给你n个门,和m组开关,每扇门都有两个开关控制,每个开关控制x扇门,如果选择了某组开关,则使这组开关里的每个开关控制的所有的门按

Codeforces 30D King&#39;s Problem? 模拟

首先将n个点排序,找出排序后的K,然后分情况讨论. 当 k == n+1时,显然是 k->1->n || k->n->1这两种的较小值,因为三角形的两边之和大于第三边. 当1 <= k && k <= n 时: 1 , k -> 1 -> n+1 -> k+1 ->n  ||  k -> n -> n+1 -> k-1 -> 1,当k+1 || k-1 不存在时将对应步骤忽略. 2 , k - > 1

Codeforces 1019C Sergey&#39;s problem 其他

原文链接https://www.cnblogs.com/zhouzhendong/p/CF1019C.html 题目传送门 - CF1019C 题意 给定一个有 $n$ 个节点 . $m$ 条边的有向图,没有自环,但是可能存在环. 现在要求选出一个点集满足一下条件. 设原来的所有点构成的点集为 $V$ ,选出的点集为 $S$,则: 1. 对于所有满足 $x,y\in S$ 的点 $x,y$ ,有向边 $(x,y)$ 不存在. 2. 对于所有满足 $x\in S,y\in V$ 的点,点 $x$

[Codeforces 986E] Prince&#39;s Problem

[题目链接] https://codeforces.com/contest/986/problem/E [算法] X到Y的路径积 , 可以转化为X到根的路径积乘Y到根的路径积 , 除以LCA到根的路径积 , 再除以LCA父节点到根的路径积 考虑如何计算根到X路径上每个点与Value的GCD之积 不妨对于每个质数P开一个数组cnt[] , 表示根到当前节点P^i有多少个 , 我们可以在DFS的过程中维护这个数组 将询问离线即可 时间复杂度 : O(V + NlogN + QlogV^2) [代码]

CodeForces 633B A Trivial Problem

传送门:http://codeforces.com/problemset/problem/633/B 题意:给你一个常数m,要你找出几个数,这几个数的阶乘的最后m位 都是0. 显然 末尾有0 一定能除以10 10可以换成5*2的形式, 那么我们就可以找5的倍数,(如果有5出现 也一定有2) ———————————————————————————————————— 渣渣之见,随便转载. #include<cstdio> int main() { long long n,k=0; // 看i阶乘的