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

思路:

正解就是染色,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. Python标准库:内置函数set([iterable])

    本函数是从迭代对象生成集合.集合能够添加或删除元素. 样例: #set() tset = set([1, 2, 3, 3, 4, 5, 6, 6]) print(tset) tset.add(20) ...

  2. VS2005 调试不能设置断点的解决办法

    [ 1] 以前也遇到过同样的问题,但没有问个为什么,也没有探个毕竟.昨天调试一个DLL,添加输出信息吧,太麻烦而且不轻易定位, 但设置断点后按“F5”,断点不可用,气泡提示“当前不会命中断点,还没有为 ...

  3. 索引大小 975.45 MB (1,022,836,736)

    975.45 MB (1,022,836,736)

  4. Qt中的打印操作

    Qt中对打印的支持是有一个独立的printsupport模块来完成的,所以,要想在程序中使用Qt的打印功能,必须先在pro文件中添加下面这句代码: QT += printsupport在这个模块中,提 ...

  5. 02-线性结构1 两个有序链表序列的合并(15 point(s)) 【链表合并】

    02-线性结构1 两个有序链表序列的合并(15 point(s)) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L ...

  6. [haoi2008]玩具命名

    某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很 ...

  7. 转载——Android permission 访问权限大全

    程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: Android.permission.ACCESS_CHECKIN_PROPERTIES ...

  8. android DHCP流程【转】

    本文转载自:http://blog.csdn.net/myvest/article/details/51483647 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   1 ...

  9. Pyhton:汉诺塔游戏

    #汉诺塔游戏攻略! def hanoi(n,x,y,z): if n == 1: print(x,'-->',z) else: hanoi(n-1,x,z,y) #将前n-1个盘子从x移动到y上 ...

  10. 机器学习: Canonical Correlation Analysis 典型相关分析

    Canonical Correlation Analysis(CCA)典型相关分析也是一种常用的降维算法.我们知道,PCA(Principal Component Analysis) 主分量分析将数据 ...