hdu 2647 Reward

原创 2015年07月10日 19:18:42

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647
简单的拓扑排序。。

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<map>
using std::cin;
using std::cout;
using std::endl;
using std::find;
using std::sort;
using std::map;
using std::pair;
using std::queue;
using std::vector;
using std::multimap;
#define pb(e) push_back(e)
#define sz(c) (int)(c).size()
#define mp(a, b) make_pair(a, b)
#define all(c) (c).begin(), (c).end()
#define iter(c) decltype((c).begin())
#define cls(arr,val) memset(arr,val,sizeof(arr))
#define cpresent(c, e) (find(all(c), (e)) != (c).end())
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i)
const int N = 10010;
typedef unsigned long long ull;
struct Node {
    int vex, val;
    Node(int i = 0, int j = 0) :vex(i), val(j) {}
};
struct TopSort {
    vector<int> G[N];
    int topNum, inq[N];
    inline void init(int n) {
        topNum = 0;
        cls(inq, 0);
        rep(i, n) G[i].clear();
    }
    inline void built(int m) {
        int a, b;
        rep(i, m) {
            scanf("%d %d", &a, &b);
            --a, --b;
            inq[a]++;
            G[b].push_back(a);
        }
    }
    inline void bfs(int n) {
        int ans = 0;
        queue<Node> q;
        rep(i, n) {
            if (!inq[i]) { q.push(Node(i, 888)); topNum++; }
        }
        while (!q.empty()) {
            Node t = q.front(); q.pop();
            ans += t.val;
            rep(i, sz(G[t.vex])) {
                if (--inq[G[t.vex][i]] == 0) q.push(Node(G[t.vex][i], t.val + 1)), topNum++;
            }
        }
        printf("%d\n", topNum == n ? ans : -1);
    }
}work;
int main() {
#ifdef LOCAL
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w+", stdout);
#endif
    int n, m;
    while (~scanf("%d %d", &n, &m)) {
        work.init(n);
        work.built(m);
        work.bfs(n);
    }
    return 0;
}

hdu 2647 Reward(拓扑排序+邻接表)

Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub...

HDU2647:Reward(拓扑排序)

Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S...

HDU2647_reward-拓扑排序

真的是简单的拓扑排序应用吗??师兄们别坑啦~~wa了几次就因为数据没处理好。。思路简单,但数据的处理很微妙,本以为自己总是对的,没想到还有脱离自己方法的测试数据。。但还是受益匪浅——每每碰到WA,检查...
  • cjsxjm
  • cjsxjm
  • 2015年05月11日 21:29
  • 205

HDU2647 Reward(拓扑排序)反向建图

Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S...

HDU——2647Reward(DFS或差分约束)

Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub...

HDU - 2647 Reward (最短路 判环)

题目大意:有一家公司,要发奖金了。因为勤劳度不同的缘故,所以奖金不能人人都相同,问如何发奖金才能使得人人都满意,且所花费的总金额达到最小解题思路:我将攀比关系当成了有向边,并赋为-1,如果出现负环的话...

hdu 2647 Reward 拓扑排序+向前星邻接表

传送门:hdu 2647 REward题目大意有个老板要给员工发工资,老板很善良想满足每个员工的要求 ,但是他很吝啬。解题思路先解释一下什么是向前星邻接表; 一般在一个图当中我们使用邻接矩阵表示连个...

HDU 2647--Reward【拓扑排序】

Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S...
  • hpuhjh
  • hpuhjh
  • 2015年08月14日 12:16
  • 482

HDU:2647 Reward(链表型拓扑排序)

Reward Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S...
  • zugofn
  • zugofn
  • 2016年08月05日 21:20
  • 140

HDU 2647 Reward (拓扑排序)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题面: Reward Time Limit: 2000/1000 MS (...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdu 2647 Reward
举报原因:
原因补充:

(最多只允许输入30个字)