样例过3WA7TLE求助
查看原帖
样例过3WA7TLE求助
941228
mdxz114514楼主2024/1/7 10:30

WA:#1#2#3 TLE:#4#5#6#7#8#9#10

#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,y;
}arr[500000];
int n,m,ans=0;
int ind[5007]={0};//赛博目录 
bool bx[5007];//最佳消费者
bool bc[5007];//最佳生产者 
bool vis[5007];
bool cmp(node a,node b){
	if(a.x==b.x)return a.y<b.y;
	return a.x<b.x;
}
int dfs(int d,int len){
	len++;
	int maxlen=0;
	if(!bc[d])return len;//如果生物是最佳生产者(即没有消费来源)返回长度 
	for(int i=ind[d];i<ind[d+1];i++){
		if(!vis[arr[i].y]){//如果没搜过 
			vis[d]=1;//标记搜过
			maxlen=max(maxlen,dfs(arr[i].y,len));
			vis[d]=0;//回溯 
		}
	}
	return maxlen;
}
int main(){
	cin>>n>>m;
	for(int i=0;i<m;i++){
		cin>>arr[i].x>>arr[i].y;
		bx[arr[i].y]=1;//最佳消费者排除 
		bc[arr[i].x]=1;//最佳生产者排除 
		ind[arr[i].x+1]++;
	}//输入
	for(int i=2;i<=n;i++){
		ind[i]+=ind[i-1];
		//cout<<ind[i]<<' '; 
	}//cout<<endl;
	sort(arr,arr+m,cmp);
	/*调试
	for(int i=0;i<m;i++)cout<<arr[i].x<<' '<<arr[i].y<<' ';
	cout<<endl;*/
	for(int i=1;i<=n;i++){
		//cout<<bx[i]<<bc[i]<<' ';
		if(!bx[i]){//如果生物是最佳消费者
			int l=dfs(i,0);
			//cout<<l;
			ans=max(ans,l);
		}//cout<<endl; 
	}cout<<ans;
}
2024/1/7 10:30
加载中...