📄 2329264_wa.cpp
字号:
#include <algorithm>
#define INIT (edge *)malloc(sizeof(edge))
using namespace std;
int k, n, m;
int pos[101];
int map[1001][1001];
typedef struct node
{
int adj;
struct node *next;
}edge;
struct Node
{
edge *head;
}adj[1001];
void bfs(int i,int v)
{
int r, f;
edge *s;
int visited[10001];
int queue[10001];
map[i][v] = 1;
memset(visited,0,sizeof(visited));
f = r = -1;
queue[++f] = v;
visited[v] = 1;
while(f!=r)
{
++r;
s = adj[queue[r]].head;
while(s->next)
{
if(!visited[s->next->adj])
{
visited[s->next->adj] = 1;
map[i][s->next->adj] = 1;
}
s = s->next;
}
}
}
int main()
{
int i;
int st, ed;
edge *s;
scanf("%d%d%d",&k,&n,&m);
memset(map,0,sizeof(map));
for(i = 0; i < k; i++)
scanf("%d",&pos[i]);
for(i = 0; i < n; i++)
{
map[i][pos[i]] = 1;
adj[i].head = INIT;
adj[i].head->next = NULL;
}
for(i = 0; i < m; i++)
{
scanf("%d%d",&st,&ed);
st--,ed--;
s = INIT;
s->adj = ed;
s->next = adj[st].head->next;
adj[st].head->next = s;
}
for(i = 0; i < k; i++)
bfs(i,pos[i]-1);
for(i = 1; i < k; i++)
{
for(int j = 0; j < n; j++)
map[0][j] += map[i][j];
}
int ans = 0;
for(i = 0; i < n; i++)
if(map[0][i]==k)
ans++;
printf("%d\n",ans);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -