#include<stdio.h>
#include<stdlib.h>
struct GNode
{
int Nv;
int Ne;
int G[105][105];
};
typedef struct GNode* MGraph;//邻接矩阵存储的图
struct ENode
{
int v1,v2;//建立一条v1指向v2的边
};
typedef struct ENode* Edge;
struct SNode
{
int MaxSize;
int top;
int* data;
};
typedef struct SNode* Stack;
MGraph CreatMGraph(int Nv)
{
MGraph m;
m=(MGraph)malloc(sizeof(struct GNode));
m->Nv=Nv;m->Ne=0;
int i,j;
for(i=0;i<=Nv-1;i++) for(j=0;j<=Nv-1;j++) m->G[i][j]=0;
return m;
}
MGraph InsertEdge(MGraph m,Edge e)
{
m->Ne++;
m->G[e->v1][e->v2]=1;
return m;
}
int main()
{
int M,N;int i,j,t;
scanf("%d%d",&M,&N);
MGraph na=CreatMGraph(M);
for(i=1;i<=N;i++)
{
Edge e;
e=(Edge)malloc(sizeof(struct ENode));
scanf("%d%d",&e->v1,&e->v2);
//printf("Success1\n");
na=InsertEdge(na,e);
//printf("Success2\n");
}
int K;int xl[105];int visited[105];
scanf("%d",&K);
while(K--)
{
int bj=0;
for(i=0;i<=M-1;i++) scanf("%d",&xl[i]);
for(i=0;i<=M-1;i++) visited[i]=0;
Stack a;
a=(Stack)malloc(sizeof(struct SNode));
a->data=(int*)malloc(sizeof(int)*105);
a->MaxSize=105;a->top=-1;
a->top++;a->data[a->top]=xl[0];
for(i=1;i<=M-1;i++)
{
if(na->G[xl[i-1]][xl[i]]==1)
{
a->top++;a->data[a->top]=xl[i];
}
else
{
for(j=a->top;j>=0;j--)
{
int zj=a->data[j];
for(t=0;t<=M-1;t++)
if(na->G[zj][t]==1&&visited[t]==0)
{
if(na->G[zj][xl[i]]==0)
{
bj=1;
}
}
}
a->top=-1;
}
visited[xl[i]]=1;
if(bj==1) break;
}
if(bj==1) printf("No"); else printf("Yes");
if(K!=0) printf("\n");
}
return 0;
}
草稿1.12/5
最新推荐文章于 2024-09-15 22:57:23 发布