题目链接:
再一次认识到自己与别人的差距
明明结构体考试的时候自己也用了
但是没有想到可以应一个bool型数组来遍历
最后比较的时候逆向比较结构体数组就好了
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
#define maxn 4000000
int flag[maxn];
struct node{
int a;
int b;
}Node[maxn];
int main()
{
int m,n;
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++)
{
scanf("%d%d",&Node[i].a,&Node[i].b);
}
for(int i=0;i<n;i++)
{
int t;
scanf("%d",&t);
memset(flag,1,sizeof(flag));
for(int j=0;j<t;j++)
{
int a;
scanf("%d",&a);
flag[a]=0;
}
bool ff=true;
for(int j=0;j<m;j++)
{
if(flag[Node[j].a]==0&&flag[Node[j].b]==0)
{
ff=false;
break;
}
}
if(ff==false)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
如果题目范围比较大
这题这样做肯定不行
只能重新开一个vector二维数组
考试的时候只开了一维hashTable数组
没有考虑到一个数可能有很多个对应的值
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#include<queue>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#include<queue>
#include<map>
#include<vector>
using namespace std;
#define maxn 100010
vector<int>hashTable[maxn];
int b[maxn];
int vis[maxn];
int main()
{
int m,n;
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++)
{
int a,b;
scanf("%d%d",&a,&b);
hashTable[a].push_back(b);
hashTable[b].push_back(a);
}
for(int i=0;i<n;i++)
{
int k;
scanf("%d",&k);
memset(b,0,sizeof(b));
bool falg=false;
for(int j=0;j<k;j++)
{
int y;
scanf("%d",&y);
//}
//for(int j=0;j<k;j++)
// {
if(falg==true)
{
continue;
}
if(b[y]==1)
{
falg=true;
continue;
}
for(int h=0;h<hashTable[y].size();h++)
{
b[hashTable[y][h]]=1;
}
}
if(falg==true)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
还是贴一个考试时18分错误代码吧
警醒自己
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#include<queue>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#include<queue>
#include<map>
#include<vector>
using namespace std;
#define maxn 1000010
int hashTable[maxn];
int b[maxn];
int main()
{
int m,n;
scanf("%d%d",&m,&n);
for(int i=0;i<m;i++)
{
int a;
scanf("%d%d",&a,&hashTable[a]);
}
for(int i=0;i<n;i++)
{
int k;
scanf("%d",&k);
memset(b,-1,sizeof(b));
bool falg=false;
for(int j=0;j<k;j++)
{
scanf("%d",&b[j]);
}
for(int j=0;j<k;j++)
{
for(int x=0;x<k;x++)
{
if(b[x]==hashTable[b[j]])
{
falg=true;
break;
}
}
}
if(falg==true)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}