难点依旧是题意。。。。需要反向构图+去重+看题


POJ3687-Labeling Balls

  题意:1-N编号的球,输出满足给定约束的按原编号排列的重量序列,如果有多组答案,则输出编号最小的Ball重量最轻,若依旧多组则输出编号次小的Ball重量最轻的方案。

  题解:在看懂题意后,再开始做会省很多时间。。。曲解题意还真是人类的本能啊。

     为了完成单向关系排序,需要用到拓扑排序

     为了符合编号最小的重量最轻...的题意,需要用到反向拓扑排序

     输入可能会有重复的关系,因此需要判重

     输出需要按原编号输出其重量,因此需要在每个编号上标记其重量

 //给球编号
//1-N编号的球,输出满足给定约束的按原编号排列的重量序列,如果有多组答案,则输出编号越小重量越轻的方案
//反向拓扑+去重+看题...(题意最后需要将Ball的重量按原编号输出)
//迭代器判重:Time:125Ms Memory:524K
//数组判重: Time:63Ms Memory:564K
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std; #define MAX 205 struct Number {
vector<int> light;
int in; //in_degree
int weight; //该编号球的重量
}num[MAX]; int n, m;
bool v[MAX][MAX]; bool TopSort()
{
for (int t = n; t > ; t--) //最重到最轻
{
int cur = n + ;
while (--cur && num[cur].in); //将最大的label先取出放在最后
if (cur == ) return false; //有环 num[cur].weight = t; //记录重量
num[cur].in--;
for (unsigned j = ; j < num[cur].light.size(); j++)
num[num[cur].light[j]].in--;
}
return true;
} int main()
{
int T;
scanf("%d", &T);
while (T--)
{
memset(num, , sizeof(num));
memset(v, false, sizeof(v));
scanf("%d%d", &n, &m);
for (int i = ; i < m; i++)
{
int light, heavy;
scanf("%d%d", &light, &heavy);
//反向构图
//迭代器判重
//vector<int> lg = num[heavy].light;
//if (find(lg.begin(), lg.end(), light) != lg.end()) continue;
//数组判重
if (v[heavy][light]) continue;
v[heavy][light] = true;
num[heavy].light.push_back(light);
num[light].in++;
} if (TopSort())
{
for (int i = ; i < n; i++)
printf("%d ", num[i].weight);
printf("%d\n", num[n].weight);
}
else printf("-1\n"); } return ;
}

ACM/ICPC 之 拓扑排序-反向(POJ3687)的更多相关文章

  1. ACM/ICPC 之 拓扑排序+DFS(POJ1128(ZOJ1083)-POJ1270)

    两道经典的同类型拓扑排序+DFS问题,第二题较第一题简单,其中的难点在于字典序输出+建立单向无环图,另外理解题意是最难的难点,没有之一... POJ1128(ZOJ1083)-Frame Stacki ...

  2. ACM/ICPC 之 拓扑排序范例(POJ1094-POJ2585)

    两道拓扑排序问题的范例,用拓扑排序解决的实质是一个单向关系问题 POJ1094(ZOJ1060)-Sortng It All Out 题意简单,但需要考虑的地方很多,因此很容易将code写繁琐了,会给 ...

  3. ACM: hihicoder #1174 : 拓扑排序·一 STL- queue

    #1174 : 拓扑排序·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来. 小Ho:小Hi,你这学期有选 ...

  4. HDU2647(拓扑排序+反向建图)

    题意不说了,说下思路. 给出的关系是a要求的工资要比b的工资多,因为尽可能的让老板少付钱,那么a的工资就是b的工资+1.能够确定关系为a>b,依据拓扑排序建边的原则是把"小于" ...

  5. HDU 4857 逃生 【拓扑排序+反向建图+优先队列】

    逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  6. 两个很经典的拓扑排序题目POJ3687+HDU1285

    一.题目链接 POJ:http://poj.org/problem?id=3687 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=1285 二.思路 这两 ...

  7. HDU 2647 Reward 【拓扑排序反向建图+队列】

    题目 Reward Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wants to d ...

  8. 拓扑排序<反向拓扑+有向环的判断>

    题目链接 #include <set> #include <map> #include <cmath> #include <queue> #includ ...

  9. hdu 4857 逆向拓扑排序+反向输出

    /*一组测试实例 4 4 2 3 1 2 4 */ #include<stdio.h> #include<string.h> #include<queue> usi ...

随机推荐

  1. 我再也不-或许永远不-用zend studio-受够了!

    zend studio背负的东西太多, 想要整合php, js, aptana, emmet, 还要git, 所以显得很累. 不过把这些它整合的东西 都用上后, 用好后, 倒确实是php的开发利器. ...

  2. vim 使用技巧

    2014-11-22 更新 文件abc 1,需要编辑abc的第三行 vim +3 abc 2,需要查询abc文件中的test字符 vim +/test abc 3,创建三个文件 aa bb cc vi ...

  3. High Frequency Trading (整理中...)

    什么是高频交易系统 1 交易指令完全是由电脑发送,对市场数据的响应延时在微秒级2 系统有专用的软硬件组成,研发时需要大量的计算机专家级的工作3 系统的硬件需要放在离交易所主机很近的位置,所谓co-lo ...

  4. php 冒泡排序

    public function demo($arr){ $len = count($arr); if ($len == 1) { return $arr; } else { for ($i = 1; ...

  5. [译]Mongoose指南 - Document

    更新 有几种方式更新document. 先看一下传统的更新方法 Tank.findById(id, function(err, tank){ if(err) return handleError(er ...

  6. 微信电脑版微信1.1 for Windows更新 可@人/转发撤回消息/可播小视频

    微信电脑版微信1.1 for Windows发布更新了,版本号为1.1.0.18,群聊可@人/可转发撤回消息/可播小视频,功能越来越接近微信手机版了. 本次更新的一些新特点: 群聊中可以@人. 消息可 ...

  7. bootstrap-dropdown

    功能:实现点击时下拉框显示 插件:dropdown.js 要点:dropdown功能往往用在导航栏.导航条上,用作标题显示.dropdown与<ul><li>标签搭配用. 以d ...

  8. centos安装

    转:http://www.cnblogs.com/Johness/archive/2012/12/03/2800126.html 在已经安装了Win7的系统下安装CentOS 注意:1.由于涉及到对硬 ...

  9. 安装sqlserver2012时出现的丧心病狂的错误

    Service Pack 安装程序 ------------------------------ 出现以下错误: 安装程序集“Microsoft.VC80.ATL,version="8.0. ...

  10. AMD正式公布第七代桌面级APU AM4新接口

    导读 本月5日,AMD正式公布了入门级的第七代桌面级APU为Bristol Ridge,在性能和能效方面较上一代产品拥有显著提升.AMD同时确认Zen处理器和新APU(Bristol Ridge)都将 ...