概述
题目链接:Wrestling Match
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e6+7;
int go[maxn],vis[maxn],col[maxn],bad[maxn];
vector<int >vec[maxn];
int dfs(int u){
go[u]=1;
for(int v:vec[u])
{
if(!col[v] &&!bad[v] ){
col[v]=col[u]^1;
if(!dfs(v)) return 0;
}
else if(col[v]==col[u])
return 0;
}
return 1;
}
int main(){
int n,m,x,y;
while(~scanf("%d %d %d %d",&n,&m,&x,&y)){
for(int i=0;i<=n;i++) vec[i].clear(),bad[i]=0,col[i]=0,go[i]=0,vis[i]=0;
for(int i=1;i<=m;i++){
int u,v;scanf("%d%d",&u,&v);
vec[u].push_back(v);vec[v].push_back(u);
vis[u]=vis[v]=1;
}
for(int i=1;i<=x;i++){
int u;scanf("%d",&u);
vis[u]=col[u]=1;
}
for(int i=1;i<=y;i++){
int u;scanf("%d",&u);
vis[u]=bad[u]=1;
col[u]=0;
}
int cnt=0;
for(int i=1;i<=n;i++) if(vis[i]) cnt++;
if(cnt<n) printf("NOn");
else{
for(int i=1;i<=n;i++){
if(go[i]) continue;
if(!dfs(i)) goto ed;
}
printf("YESn");
continue;
ed:
printf("NOn");
}
}
return 0;
}
题目链接:Regular Number
/**
*
*
* 输出所给字符串中所有的能够表示的字符串。表示:每一行选择一个数字所形成的字符串 看样例。
*
*
*
* [样例输入]
* 4
* 3 0 9 7
* 2 5 7
* 2 2 5
* 2 4 5
* 09755420524
*
* [输出]:
*
* 9755
* 7554
* 0524
*
* bitset
*
*/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e3 + 7;
bitset<maxn> now[20];
bitset<maxn> tmp;
char ss[5100000];
int main() {
for (int i = 0; i < 20; i++) now[i].reset();
int t;
scanf("%d", &t);
for (int ii = 0; ii < t; ii++) {
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int x;
scanf("%d", &x);
now[x].set(ii);
}
}
scanf("%s", ss);
tmp.reset();
int sz = strlen(ss);
for (int i = 0; i < sz; i++) {
tmp = tmp << 1;
tmp[0] = 1;
tmp &= now[ss[i] - '0'];
if (tmp[t - 1] == 1) {
char zx=ss[i+1];
ss[i+1]='