求找错,bfs部分,一直TLE
查看原帖
求找错,bfs部分,一直TLE
285617
黑影洞人楼主2022/6/30 21:52
#include<cstdio>
#include<bitset>
#include<queue>
#include<algorithm>
#include<cstring>
#define N 1009
using namespace std;
int n,m,q,head[N],to[N],nxt[N],tot,a,dis[N];
bitset<N>fifi[N][N];
void add(int u,int v){
	to[++tot]=v;
	nxt[tot]=head[u];
	head[u]=tot;
}
void bfs(int &s){
	memset(dis,0x3f,sizeof(dis));
	queue<int >q;
	q.push(s);dis[s]=0;
	while(!q.empty()){
		int x=q.front();q.pop();
		for(int i=head[x];i;i=nxt[i]){
			int y=to[i];
			if(dis[y]==dis[0])dis[y]=dis[x]+1,q.push(y);
		}
	}
}
signed main(){
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=m;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		add(x,y);add(y,x);
	}
	for(int i=1;i<=n;i++){
		bfs(i);
		for(int j=1;j<=n;j++)if(dis[j]!=dis[0])fifi[i][dis[j]][j]=1;
		for(int j=1;j<=n;j++)fifi[i][j]|=fifi[i][j-1];
	}
	while(q--){
		scanf("%d",&a);bitset<N>ans;
		while(a--){
			int x,y;scanf("%d%d",&x,&y);//y=min(y,n);
			ans|=fifi[x][y];
		} 
		printf("%d\n",ans.count());
	}
	return 0;
}



2022/6/30 21:52
加载中...