• 洛谷 P3387 缩点 题解


    题面

    裸跑一遍SPFA,统计每个点的入队次数;

    如果该点的入队次数>=总点数,那么该点便是一个负环上的点;

    重点!!!:

     1.不是“YES”,是“YE5”;

     2.不是“NO”,是“N0”;(是零);

     3.多测不清空,爆零两行泪;

    #include <bits/stdc++.h>
    #pragma GCC optmize(2)
    using namespace std;
    int t;
    int n,m;
    struct littlestar{
        int to;
        int nxt;
        int w;
    }star[600010];
    int head[600010],cnt;
    void add(int u,int v,int w)
    {
        star[++cnt].to=v;
        star[cnt].nxt=head[u];
        star[cnt].w=w;
        head[u]=cnt;    
    }
    queue<int> q;
    int dis[600010],vis[600010];
    int num[600010];
    void SPFA()
    {
        memset(num,0,sizeof(num));
        memset(vis,0,sizeof(vis));
        memset(dis,0x3f,sizeof(dis));
        while(q.size()) q.pop();
        q.push(1);
        vis[1]=1;
        dis[1]=0;
        while(q.size()){
            int u=q.front();
            q.pop();
            vis[u]=0;
            for(int i=head[u];i;i=star[i].nxt){
                int v=star[i].to;
                if(dis[v]>dis[u]+star[i].w){
                    dis[v]=dis[u]+star[i].w;
                    if(!vis[v]){
                        vis[v]=1;
                        q.push(v);
                        ++num[v];        
                        if(num[u]>=n){
                            cout<<"YE5"<<endl;
                            return;
                        }
                    }
                }
            }
        }
        cout<<"N0"<<endl;
        return;
    }
    int main ()
    {
        cin>>t;
        while(t--){
            memset(star,0,sizeof(star));
            memset(head,0,sizeof(head));
            scanf("%d%d",&n,&m);
            for(register int i=1;i<=m;i++){
                int u,v,w;
                scanf("%d%d%d",&u,&v,&w);
                add(u,v,w);
                if(w>=0) add(v,u,w);
            }
            SPFA();    
        }    
        return 0;
    } 
  • 相关阅读:
    用OpenGL简单编写的一个最简单贪吃蛇游戏
    Python lambda map filter reduce
    Hadoop Python MapReduce
    Python faker生成数据
    Pandas数据清洗
    PySpark与jupyer notebook
    虚拟机与宿主机网络共享
    集合覆盖问题与贪婪算法
    最快路径与狄克斯特拉
    最短路径问题与广度优先搜索
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11274698.html
Copyright © 2020-2023  润新知