Problem Link : http://www.lightoj.com/volume_showproblem.php?problem=1111
Solution :
#include<bits/stdc++.h>
using namespace std;
vector<int>v[1002];
vector<int>vv;
int visited[1002];
int arr[1002];
void bfs(int s)
{
queue<int>q;
memset(visited,-1,sizeof(visited));
visited[s]=0;
arr[s]=arr[s]+1;
q.push(s);
int u,p,x;
while(!q.empty())
{
u=q.front();
q.pop();
for(int i=0; i<v[u].size(); i++)
{
p=v[u][i];
if(visited[p]==-1)
{
visited[p]=visited[u]+1;
x=arr[p]=arr[p]+1;
q.push(p);
}
}
}
//w= visited[d]-visited[s];
//return w;
}
int main()
{
int t,n,m,k,a,b;
scanf("%d",&t);
for(int ca=1; ca<=t; ca++)
{
scanf("%d%d%d",&k,&n,&m);
for(int i=1; i<=k; i++)
{
scanf("%d",&a);
vv.push_back(a);
}
for(int i=1; i<=m; i++)
{
scanf("%d%d",&a,&b);
v[a].push_back(b);
}
for(int i=0; i<k; i++)
{
bfs(vv[i]);
}
for(int i=0; i<1002; i++) v[i].clear();
int cnt=0;
for(int i=1; i<=n; i++ )
{
if(arr[i]==k) cnt++;
}
printf("Case %d: %d\n",ca,cnt);
vv.clear();
memset(arr,0,sizeof(arr));
}
}
Solution :
#include<bits/stdc++.h>
using namespace std;
vector<int>v[1002];
vector<int>vv;
int visited[1002];
int arr[1002];
void bfs(int s)
{
queue<int>q;
memset(visited,-1,sizeof(visited));
visited[s]=0;
arr[s]=arr[s]+1;
q.push(s);
int u,p,x;
while(!q.empty())
{
u=q.front();
q.pop();
for(int i=0; i<v[u].size(); i++)
{
p=v[u][i];
if(visited[p]==-1)
{
visited[p]=visited[u]+1;
x=arr[p]=arr[p]+1;
q.push(p);
}
}
}
//w= visited[d]-visited[s];
//return w;
}
int main()
{
int t,n,m,k,a,b;
scanf("%d",&t);
for(int ca=1; ca<=t; ca++)
{
scanf("%d%d%d",&k,&n,&m);
for(int i=1; i<=k; i++)
{
scanf("%d",&a);
vv.push_back(a);
}
for(int i=1; i<=m; i++)
{
scanf("%d%d",&a,&b);
v[a].push_back(b);
}
for(int i=0; i<k; i++)
{
bfs(vv[i]);
}
for(int i=0; i<1002; i++) v[i].clear();
int cnt=0;
for(int i=1; i<=n; i++ )
{
if(arr[i]==k) cnt++;
}
printf("Case %d: %d\n",ca,cnt);
vv.clear();
memset(arr,0,sizeof(arr));
}
}