题意:略(忙着准备文化课。。。明天期中考啊。。。。

思路:

正解就是染色,2-sat搞;

AC代码(虽然是错误的。。。数据水(过踏马的也行啊,起码打脸他啊!)

4 3 1 0

1 2

2 3

3 4

4

这个就挂了;

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAX=1010;
const double q=(1+sqrt(5.0))/2.0;
const double eps=1e-100;
int n,m;
int v[MAX];
int a[MAX][MAX];
int main()
{
int t,i,j;
int x,y;
while(~scanf("%d%d%d%d",&n,&m,&x,&y))
{
int flag=0;
int b,c;
memset(a,0,sizeof(a));
memset(v,-1,sizeof(v));
for(i=0;i<m;i++)
{
scanf("%d%d",&b,&c);
a[b][c]=a[c][b]=1;
}
for(i=1;i<=x;i++)
{
scanf("%d",&b);
for(j=0;j<n;j++)
{
if(a[b][j])
{
if(v[j]==1)
flag=1;
v[j]=0;
}
}
v[b]=1;
}
for(i=1;i<=y;i++)
{
scanf("%d",&b);
for(j=0;j<n;j++)
{
if(a[b][j])
{
if(v[j]==0)
flag=1;
v[j]=1;
}
}
v[b]=0;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(a[i][j])
{
if(v[i]==-1&&v[j]==-1)
{
v[i]=1;
v[j]=0;
}
else if(v[i]!=-1&&v[j]!=-1)
{
if(v[i]+v[j]!=1)
flag=1;
}
else if(v[i]!=-1)
{
v[j]=1-v[i];
}
else
v[i]=1-v[j];
}
}
}
for(i=1;i<=n;i++)
{
// printf("%d ",v[i]);
if(v[i]==-1)
flag=1;
}
// puts("");
if(flag)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}

贴份应该正确的(escape

#include<bits/stdc++.h>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int N=5*1e4+1000;
#define eps 1e-4
int co[10005];
int vis[10005];
vector<int>g[10005];
int dfs(int u)
{
int sz=g[u].size();
for(int i=0; i<sz; i++)
{
int v=g[u][i];
if(!co[v])
{
co[v]=!co[u];
if(!dfs(v))
return 0;
}
else if(co[u]==co[v])
{
return 0;
}
}
return 1;
}
int main()
{
int n,m,x,y;
while(cin>>n>>m>>x>>y)
{
for(int i=0; i<10005; i++)
g[i].clear();
if(n==1)
{
puts("NO");
continue;
}
for(int i=0; i<m; i++)
{
int xx,yy;
scanf("%d%d",&xx,&yy);
g[xx].push_back(yy);
}
memset(co,0,sizeof(co));
for(int i=0; i<x; i++)
{
int xx;
scanf("%d",&xx);
co[xx]=1;
// int sz=g[xx].size();
// for(int i=0; i<sz; i++)
// {
// int v=g[xx][i];
// co[v]=!co[xx];
// }
}
for(int i=0; i<y; i++)
{
int xx;
scanf("%d",&xx);
co[xx]=0;
// int sz=g[xx].size();
// for(int i=0; i<sz; i++)
// {
// int v=g[xx][i];
// co[v]=!co[xx];
// }
}
if(x==0&&y==0)
puts("NO");
else
{
int flag=1;
for(int i=1; i<=n; i++)
if(!dfs(i))
flag=0;
if(flag)
puts("YES");
else
puts("NO");
}
}
return 0;
}

加强后的瞎搞(求hack

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAX=1010;
const double q=(1+sqrt(5.0))/2.0;
const double eps=1e-100;
int n,m;
int v[MAX];
int a[MAX][MAX];
int main()
{
int t,i,j,k;
int x,y;
while(~scanf("%d%d%d%d",&n,&m,&x,&y))
{
int flag=0;
int b,c;
memset(a,0,sizeof(a));
memset(v,-1,sizeof(v));
for(i=0; i<m; i++)
{
scanf("%d%d",&b,&c);
a[b][c]=a[c][b]=1;
}
for(i=1; i<=x; i++)
{
scanf("%d",&b);
for(j=0; j<n; j++)
{
if(a[b][j])
{
if(v[j]==1)
flag=1;
v[j]=0;
}
}
v[b]=1;
}
for(i=1; i<=y; i++)
{
scanf("%d",&b);
for(j=0; j<n; j++)
{
if(a[b][j])
{
if(v[j]==0)
flag=1;
v[j]=1;
}
}
v[b]=0;
}
for(k=0; k<2; k++)
{
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
if(a[i][j])
{
if(v[i]==-1&&v[j]==-1&&k)
{
v[i]=1;
v[j]=0;
}
else if(v[i]!=-1&&v[j]!=-1)
{
if(v[i]+v[j]!=1)
flag=1;
}
else if(v[i]!=-1)
{
v[j]=1-v[i];
}
else if(v[j]!=-1)
v[i]=1-v[j];
}
}
}
}
for(i=1; i<=n; i++)
{
// printf("%d ",v[i]);
if(v[i]==-1)
flag=1;
}
// puts("");
if(flag)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
/*
6 5 0 0
1 2
2 3
3 4
3 1
5 6 6 5 0 0
1 2
2 3
3 4
4 1
5 6 4 3 1 0
1 2
2 3
3 4
4 */

HDU5971【瞎搞】的更多相关文章

  1. URAL 1203. Scientific Conference(瞎搞)

    题目链接 本来觉得这不是经典的贪心吗..果断水一次,wa了,看了看discuss,发现貌似不好水,土土的DP了一下,复杂度很高了,又T了...然后想想单调队列,二分什么的...不好往上加,直接搞了标记 ...

  2. Codeforces Gym 100610 Problem H. Horrible Truth 瞎搞

    Problem H. Horrible Truth Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/1006 ...

  3. B. Salty Fish Go! -期望题(瞎搞题)

    链接:https://www.nowcoder.com/acm/contest/104/B来源:牛客网 题意:A few days ago, WRD was playing a small game ...

  4. HDU5532 Almost Sorted Array(最长上升子序列 or 瞎搞个做差的数组)

    题目链接:点我 题意:给定一个序列,询问是否能删除一个数让它成为非递减或者非递增的序列. 比如说 删除后的序列是1 3 3 5 或者5 3 3 1 或者1 3 5 或者5 3 1 都可以.只要满足删掉 ...

  5. TOJ3097: 单词后缀 (字典树 or map瞎搞)

    传送门 (<---可以点击的~) 时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte 描述 有些英语单词后缀都是一样的,现在我们需要从给定的一堆单词里 ...

  6. 8VC Venture Cup 2016 - Elimination Round B. Cards 瞎搞

    B. Cards 题目连接: http://www.codeforces.com/contest/626/problem/B Description Catherine has a deck of n ...

  7. ubuntu--基础环境瞎搞集合

    安装ubuntu系统后有很多东西需要自己瞎搞一下,这里把一些瞎搞的过程记录在这里,方便以后重新装系统后重新配置. 一.安装. 可以在windows下制作启动盘(软碟通),然后开机u盘启动即可安装,预留 ...

  8. Codeforces631C【栈维护+瞎搞】

    题意: 百度. 思路: 如果该查询的R比前面的所有都大,那么前面所有都失效. 那么我先预处理出这些有效的. 那最坏的情况不就是栈里面元素(R)很多 n,n-1,n-2,n-3,n-4而且都是相反排序的 ...

  9. BZOJ 4236: JOIOJI map瞎搞

    分别记录J,O,I,的个数 cnt[char][i] 表示处理到第i位,char的个数 显然当且仅当 cnt[J][i] - cnt[O][i] == cnt[J][j-1] - cnt[O][j-1 ...

随机推荐

  1. iframe仿ajax图片上传

    1.前台页面: iframe_upload.html <html> <body> <form action="upload.php" id=" ...

  2. CI学习相关地址

    1.CI中国:http://codeigniter.org.cn/ 2.CodeIgniter 2.1.3 for SAE:http://codeigniter.org.cn/forums/forum ...

  3. iOS 优化方案浅析

    本文转载至 http://mobile.51cto.com/iphone-413256.htm Windows独特的注册表机制以及复杂的进程.内存管理,给了很多PC“优化”类软件极大的机遇,比如奇虎3 ...

  4. 九度OJ 1084:整数拆分 (递归)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2274 解决:914 题目描述: 一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1 ...

  5. Linux就该这么学--命令集合8(命令行通配符)

    1.查看sda开头的所有设备文件: ls /dev/sda* 2.查看sda后面只有一个字符的设备文件: ls /dev/sda? 3.查看sda后面包含0-9数字的设备文件: ls /dev/sda ...

  6. mysql给一张表新增字段,并设置该字段为外键

    首先给usercategory表新增libraryid字段: alter table usercategory add libraryid varchar(50) 修改picturelibrary表的 ...

  7. 剑指Offer:调整数组顺序使奇数位于偶数前面【21】

    剑指Offer:调整数组顺序使奇数位于偶数前面[21] 题目描述 输入一个整形数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 解题分析 使用插 ...

  8. go 包的问题

    同一个包下的所有方法,都整合到一个里面去了,通过包名可以任意调用包下的方法. 文件夹的名字必须要和文件里面的package的名字一样,否则会报错... 导文件就是文件所在的包 导包import(),是 ...

  9. CSS3学习笔记(2)—左右跳动的红心

    还在为无法表达内心澎湃的心情而着急吗?还在为制作跳动的心而烦恼吗?哈哈,今天我就把代码全部奉上,为你们追妹子添点贡献,下面来看最终的动态效果(事先说明一下:我用的截屏gif制作软件是绿色版的,所以gi ...

  10. HDU6025 Coprime Sequence —— 前缀和 & 后缀和

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6025 Coprime Sequence Time Limit: 2000/1000 MS (Java/ ...