A Wrestling Match
大概就是会给你n个人m场比赛(每场比赛的两个人一个好人一个坏人)以及好人和坏人的数量 问是否能分出好人和坏人
师哥说是个二分图的匹配问题 用染色法做
emmmmm当时做的时候没看都…后来补题的时候做的不知道对不对对…我也不知道怎么a的反正是ac了(滑稽
#include <iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
struct qwe
{
int for1,to;
} s[20005];
int cnt=0,head[1005],ans1[1005],ans2[1005],i,j,k,po,flag,flag1,flag2,a,b,m,n,z,x;
void add_in(int mn,int nm)
{
s[cnt].to=nm;
s[cnt].for1=head[mn];
head[mn]=cnt;
cnt++;
}
void querty(int mn)
{
int i=mn,j,k=ans1[mn];
for(j=head[i]; j!=-1; j=s[j].for1)
{
if(ans2[s[j].to]==1)
{
if(ans1[s[j].to]==0)
{
ans1[s[j].to]=k^3;
querty(s[j].to);
}
else if(ans1[s[j].to]!=(k^3))
{
po=3;
}
}
}
}
int main()
{
while(~scanf("%d%d%d%d",&m,&n,&a,&b))
{
cnt=0;
flag=1;
for(i=0; i<=m; i++)
head[i]=-1,ans1[i]=0,ans2[i]=0;
for(i=0; i<n; i++)
{
scanf("%d%d",&z,&x);
add_in(z,x);
add_in(x,z);
ans2[z]=1;
ans2[x]=1;
}
for(i=0; i<a; i++)
{
scanf("%d",&z);
ans1[z]=1;
ans2[z]=2;
}
for(i=0; i<b; i++)
{
scanf("%d",&z);
ans1[z]=2;
ans2[z]=2;
}
for(i=1; i<=m; i++)
{
if(!ans2[i])
flag=0;
}
if(flag)
{
flag1=0;
po=0;
for(i=1;i<=m;i++)
{
if(ans1[i]!=0)
{
for(j=head[i];j!=-1;j=s[j].for1)
{
if(ans1[s[j].to]==0)
{
ans1[s[j].to]=ans1[i]^3;
}
else
if(!(ans1[s[j].to]^ans1[i]))
{
po=3;
break;
}
}
}
}
if(po>1)
{
flag=0;
}
//printf("%d\n",flag);
if(flag)
for(i=1; i<=m; i++)
{
//printf("%d %d\n",ans1[i],ans2[i]);
if(ans2[i]==1)
{
if(ans1[i]==0)
{
ans1[i]=flag1+1;
querty(i);
}
flag1++;
flag1%=2;
}
else
{
for(j=head[i];j!=-1;j=s[j].for1)
{
if(ans1[s[j].to]==0)
ans1[s[j].to]=ans1[i]^3;
else
if(!(ans1[s[j].to]^ans1[i]))
{
po=3;
break;
}
}
}
if(po>1)
break;
}
if(po>1)
flag=0;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
C Game of Taking Stones
是个典型的约瑟夫博弈…然而当时并不会做而且还要用到java大数…
D A Simple Math Problem
题目大意是给你两个数 一个是 a+b 另一个是ab/gcd(a,b)让你求a和b的值 然后 这题 会发现 这两个数的gcd 就是a和b的gcd
H To begin or not to begin
题目大意是给你k个黑球和一个红球 两个人轮流拿 谁先摸到红球获胜 问你谁先开始获胜的可能性高 1是先拿的高 2是后拿的高 0是两个一样
这题猜的结论 就先算几个找规律就往完了…
I Convex
题目大意给你一个n边凸包每个顶点到中心的距离一样 给你n和边长 每两条边之间的夹角 然后让你求这个凸包的面积
日常 1/2sin(m)ab 就完了…
J Find Small A
给你n个数字 让你看它的二进制里头 有多少个97(指后8位和97一样)
用位运算…
其他的 补题(待续中…