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


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. angularjs之自己定义指令篇

    1>指令基础知识 directive() 参考资料 http://www.tuicool.com/articles/aAveEj http://damoqiongqiu.iteye.com/bl ...

  2. Linux下更新时间

    方法一.使用命令 ntpdate time-a.nist.gov 方法二.本地安装ntpdate客户端 在本地安装ntpdate客户端,更新时用 ntpdate cn.pool.ntp.org 如果你 ...

  3. flask 项目的开发经验总结

    已经开发了几个flask项目, 是时候总结一下了, 这里涉及到项目源码的组织, 常用的包, 源码示例. =========================需要的 python 包有:========= ...

  4. JS keycode 事件响应

    <script language="javascript"> function keyevent(){ if(event.keyCode==13) alert(&quo ...

  5. Bots(逆元,递推)

    H. Bots time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input out ...

  6. centos-6.5 安装apache

    1.避免端口.程序冲突.使用rpm卸载httpd [root@www /]# rpm -qa httpd #检查httpd的包 [root@www /]# rpm -e httpd --nodeps ...

  7. DEV控件GridControl常用属性设置

    1. 如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 2. 如何新增一条记录 (1).gridView.Ad ...

  8. SpringDataJPA的几个使用记录

    public Page<XMGLFileTemplateDTO> findXMGLFileTemplateByConditions(XMGLFileTemplateDTO xmglFile ...

  9. UITabBarController的使用和坑

    本人apem 说到UITabBarController, 最首要的坑就是tabbar的图片不显示的问题 1. tabbar上的图片一定要2套以上, 例如一个uitabbaritem的image是 se ...

  10. 使用SQLPlus连接Oracle实例

    使用Windows徽标+R,打开运行对话框,输入cmd并回车. Microsoft Windows Microsoft Corporation.保留所有权利. C:\Users\user> 在C ...