http://pipioj.online/problem.php?cid=1029&pid=3
PIPIOJ1325 问题 D: 社交网络
#include <bits/stdc++.h>
using namespace std;
const int N = 1003;
vector <int> AdjList[N]; //邻接表
bool vis[N]; //感染主机
bool viss[N]; //Bfs辅助访问数组
bool bfs(int i,int t,int k){
if(!vis[i]) return 0; //该主机未感染
queue <int> q; //bfs辅助队列 ps:易错点队列如果设置为全局变量要清空
memset(viss,0,sizeof(viss));
q.push(i);
viss[i]=1;
int T=0,Cnt=1,temp;
while(!q.empty()){
int s = q.size();
for(int i=0;i<s;i++){
temp=q.front();
q.pop();
for(int j=0;j<AdjList[temp].size();j++){
int now = AdjList[temp][j];
if(!vis[now]) {return 0;}
if(!viss[now]){
Cnt++;
q.push(AdjList[temp][j]);
viss[now] = 1;
}
}
}
if(++T==t) {break;}
}
if(Cnt==k){return 1;}
return 0;
}
int main()
{
int n,m,u,v;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d",&u,&v);
AdjList[u].push_back(v);
AdjList[v].push_back(u);
}
// for(int i=1;i<=n;i++){
// for(int j=0;j<AdjList[i].size();j++){
// cout<<i<<"->"<<AdjList[i][j]<<endl;
// }
// }
int k,t,s;
scanf("%d%d",&k,&t);
for(int i=0;i<k;i++){
scanf("%d",&s);
vis[s]=1;
}
int ans[N],cnt=0;
for(int i=1;i<=n;i++){
if(bfs(i,t,k))ans[cnt++]=i;
}
if(cnt==0){
printf("-1\n");
return 0;
}
sort(ans,ans+cnt);
for(int i=0;i<cnt;i++)printf("%d ",ans[i]);
printf("\n");
return 0;
}
重点1:
建立邻接表储存图
vector AdjList[N]; //邻接表
利用vector数组
重点2:
bfs的写法