L3-025 那就别担心了 (天梯赛)

不得不吐槽一下出题人的数据真水 开始我的做法完全错了 但是居然能过19分

开始我想拓扑排序 但发现只需要bfs走一遍就好 这个时候我还用的dp 肯定是不对的 同一个点可能会入队多次 而且dp值会被加多次

实际上就是直接bfs到底就好 遍历每条路径 但是最后一个 点tle 为啥呢?

这种情况下4——>8这条路径会走三次 于是就想办法只走一遍 考虑记忆化dfs 如果就是单纯的dfs和bfs复杂度是一样的会tle

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int maxn=505; 
int n,m,ans,flag=true;
vector<int>Q[maxn];
int vis[maxn];
int dfs(int u){
	if(vis[u])return vis[u];
	int res=0;
	for(int i=0;i<Q[u].size();i++){
		int to=Q[u][i];
		res+=dfs(to);
	}
	if(!res)flag=false;
	return vis[u]=res;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int uu,vv;
		cin>>uu>>vv;
		Q[uu].push_back(vv);
	}
	int S,T;
	cin>>S>>T;
	vis[T]=1;
	cout<<dfs(S)<<" ";
	if(flag)
	cout<<"Yes"<<endl;
	else cout<<"No"<<endl;
	
     return 0;
}
posted @ 2022-03-29 19:36  wzx_believer  阅读(117)  评论(0)    收藏  举报