• L3025 那就别担心了 (天梯赛)


    不得不吐槽一下出题人的数据真水 开始我的做法完全错了 但是居然能过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;
    }
    
  • 相关阅读:
    自定义异常
    this()和super()的区别
    Eclipse快速创建函数
    Eclipse的.java文件有蓝色三角符号
    可变数量参数
    近期的目标
    怎么在电脑右键的新建里面添加.md文件
    数组的排序(从小到大)
    Arrays类
    不用乘法计算乘法(快速计算)
  • 原文地址:https://www.cnblogs.com/wzxbeliever/p/16073484.html
Copyright © 2020-2023  润新知