标签:des style http color os io for ar
2 1 1 2 2 2 1 2 2 1
1777 -1
题目大意:
n个人,m条边,每条边a,b 表示a比b的工资多1,每个人的工资至少888,问你工资和至少多少?如果出现矛盾关系,输出-1
解题思路:
解题思路:根据人的工资关系建立拓扑图,工资尽量从888开始,然后根据是否能全部排好序判断是出现矛盾关系。
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
const int maxn=11000;
int n,m,ans[maxn],r[maxn];
vector <vector<int> > v;
void input(){
    v.clear();
    v.resize(n+1);
    for(int i=0;i<=n;i++){
        ans[i]=-1;
        r[i]=0;
    }
    int a,b;
    while(m-- >0){
        scanf("%d%d",&a,&b);
        v[b].push_back(a);
        r[a]++;
    }
}
void solve(){
    queue <int> q;
    for(int i=1;i<=n;i++){
        if(r[i]==0) q.push(i);
    }
    int tmp=888;
    while(!q.empty()){
        int qsize=q.size();
        while(qsize-- >0){
            int s=q.front();
            q.pop();
            ans[s]=tmp;
            for(int i=0;i<v[s].size();i++){
                int d=v[s][i];
                r[d]--;
                if(r[d]==0) q.push(d);
            }
        }
        tmp++;
    }
    int sum=0;
    for(int i=1;i<=n;i++){
        if(ans[i]>0) sum+=ans[i];
        else{
            sum=-1;
            break;
        }
    }
    printf("%d\n",sum);
}
int main(){
    while(scanf("%d%d",&n,&m)!=EOF){
        input();
        solve();
    }
    return 0;
}
HDU 2647 Reward(图论-拓扑排序),布布扣,bubuko.com
标签:des style http color os io for ar
原文地址:http://blog.csdn.net/a1061747415/article/details/38317031