• Codeforces Round #652 (Div. 2) E. DeadLee 构造


    #include<map>
    #include<queue>
    #include<time.h>
    #include<limits.h>
    #include<cmath>
    #include<ostream>
    #include<iterator>
    #include<set>
    #include<stack>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define rep_1(i,m,n) for(int i=m;i<=n;i++)
    #define mem(st) memset(st,0,sizeof st)
    int read()
    {
        int res=0,ch,flag=0;
        if((ch=getchar())=='-')             //判断正负
            flag=1;
        else if(ch>='0'&&ch<='9')           //得到完整的数
            res=ch-'0';
        while((ch=getchar())>='0'&&ch<='9')
            res=res*10+ch-'0';
        return flag?-res:res;
    }
    typedef long long ll;
    typedef pair<int,int> pii;
    typedef unsigned long long ull;
    typedef pair<double,double> pdd;
    const int inf = 0x3f3f3f3f;
    const int N=2e5+10;
    int w[N];
    vector<int>ans;
    vector<pii>e[N];
    queue<int>q;
    bool vis[N],in_ans[N];
    void solve()
    {
        memset(vis,0,sizeof vis);
        memset(in_ans,0,sizeof in_ans);
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
            cin>>w[i];
        for(int i=1;i<=m;i++)
        {
            int x,y;
            cin>>x>>y;
            e[x].push_back({y,i});
            w[x]--;
            e[y].push_back({x,i});
            w[y]--;
        }
        //这些是再怎么吃,都不会吃完的,那么就可以把这些人,安排到最后
        //那另外一种食物吐出来 
        for(int i=1;i<=n;i++)
            if(w[i]>=0)
                q.push(i),vis[i]=1;
        while(q.size())
        {
            int food=q.front();
            q.pop();
            for(auto p:e[food])
            {
                if(!in_ans[p.second])
                    ans.push_back(p.second),in_ans[p.second]=1;
                if(!vis[p.first])
                {
                    w[p.first]++;//把另外一种吐出来 
                    if(w[p.first]>=0)
                    {
                        vis[p.first]=1;
                        q.push(p.first);
                    }
                }
            }
        }
        //倒着输出 
        if((int)ans.size()==m)
        {
            cout<<"ALIVE"<<endl;
            for(int i=ans.size()-1;i>=0;i--)
                cout<<ans[i]<<" ";
            cout<<endl;
        }
        else
            cout<<"DEAD"<<endl;
    }
    int main()
    {
        int t=1;
        while(t--)
            solve();
        return 0;
    }
  • 相关阅读:
    Js学习第十天----函数
    IOS Object和javaScript相互调用
    hadoop2.7.1 nutch2.3 二次开发windows环境
    交叉熵代价函数(作用及公式推导)
    推断dxf文件的版本号
    mahout in Action2.2-聚类介绍-K-means聚类算法
    Xcode 技巧充电篇
    Android 推断SD卡是否存在及容量查询
    springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定
    pip简单配置
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/13190117.html
Copyright © 2020-2023  润新知