Labeling Balls
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 12246   Accepted: 3508

Description

Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them with 1 to N in such a way that:

  1. No two balls share the same label.
  2. The labeling satisfies several constrains like "The ball labeled with a is lighter than the one labeled with b".

Can you help windy to find a solution?

Input

The first line of input is the number of test case. The first line of each test case contains two integers, N (1 ≤ N ≤ 200) and M (0 ≤ M ≤ 40,000). The next M line each contain two integers a and b indicating the ball labeled with a must be lighter than the one labeled with b. (1 ≤ a, b ≤ N) There is a blank line before each test case.

Output

For each test case output on a single line the balls' weights from label 1 to label N. If several solutions exist, you should output the one with the smallest weight for label 1, then with the smallest weight for label 2, then with the smallest weight for label 3 and so on... If no solution exists, output -1 instead.

Sample Input

5

4 0

4 1
1 1 4 2
1 2
2 1 4 1
2 1 4 1
3 2

Sample Output

1 2 3 4
-1
-1
2 1 3 4
1 3 2 4 这道题搜了下题解,大神的思路就是清新脱俗;附上自己的理解分析
There is a blank line before each test case. 这句话可把我坑死了 还以为每组测试数据前都要打印出一行空格,pe了好久
题意:输入n,m代表有n个数参加排序,接下来m行输入数据x ,y表示x要在y的前边,但是重量小的(即数字小的)要尽量放到前边;
题解:此题要用反向拓扑,正向是肯定不行的,如数据
5 3
1 4
4 2
3 5
正向的话输出结果为 3 1 5 2 4 显然不对,正确结果应该为 1 3 4 2 5 同时采用优先队列,重的最先输出,我们先将重的,赋给
最先出队的(因为设置的优先队列是大的先出队)这样就可以把轻的尽量留在最后(因为是要逆序,所以留到后边,输出时是在前边)
#include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
int n,m;
int map[300][300];
int vis[300],a[300];
void getmap()
{
int i,j;
memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
while(m--)
{
int a,b;
scanf("%d%d",&a,&b);
if(!map[b][a])
{
map[b][a]=1;
vis[a]++;
}
}
}
void tuopu()
{
int i,j,k,g=n;
k=0;
memset(a,0,sizeof(a));
priority_queue<int>q;
while(!q.empty())
q.pop();
for(i=1;i<=n;i++)
if(!vis[i])
q.push(i);
int u;
while(!q.empty())
{
u=q.top();
q.pop();
a[u]=g--;
for(i=1;i<=n;i++)
{
if(map[u][i])
{
vis[i]--;
if(vis[i]==0)
q.push(i);
}
}
}
if(g!=0)
printf("-1\n");
else
{
for(i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
}
}
int main()
{
int t,o=0;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
getmap();
tuopu();
}
return 0;
}

  

												

poj 3687 Labeling Balls【反向拓扑】的更多相关文章

  1. poj 3687 Labeling Balls - 贪心 - 拓扑排序

    Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them with 1 to N ...

  2. POJ 3687 Labeling Balls【拓扑排序 优先队列】

    题意:给出n个人,m个轻重关系,求满足给出的轻重关系的并且满足编号小的尽量在前面的序列 因为输入的是a比b重,但是我们要找的是更轻的,所以需要逆向建图 逆向建图参看的这一篇http://blog.cs ...

  3. POJ 3687 Labeling Balls(拓扑排序)题解

    Description Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them ...

  4. POJ - 3687 Labeling Balls (拓扑)

    (点击此处查看原题) 题意 此处有n盏灯,编号为1~n,每盏灯的亮度都是唯一的,且在1~n范围之间,现已知m对灯之间的关系:a b ,说明灯a的亮度比灯b小,求出每盏灯的亮度,要求字典序最小(编号小的 ...

  5. [ACM] POJ 3687 Labeling Balls (拓扑排序,反向生成端)

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10161   Accepted: 2810 D ...

  6. POJ 3687 Labeling Balls(反向拓扑+贪心思想!!!非常棒的一道题)

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16100   Accepted: 4726 D ...

  7. poj——3687 Labeling Balls

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14835   Accepted: 4346 D ...

  8. POJ 3687 Labeling Balls()

    Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9641 Accepted: 2636 Descri ...

  9. POJ 3687 Labeling Balls (top 排序)

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15792   Accepted: 4630 D ...

随机推荐

  1. SQL Trainning 总结

    body { font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI ...

  2. 【html】【5】html class属性css样式

    必看参考: http://www.divcss5.com/css3-style/ http://www.jb51.net/css/142448.html http://www.w3school.com ...

  3. java基础(死循环退出选项)

    java程序中为了程序正常运行,需要给无限循环加入一个退出选项,保证程序的可执行性. import java.util.Scanner; public class { public static vo ...

  4. 数据库(学习整理)----3--Oracle创建表和设置约束

    BBS论坛表设计 包含的表:BBSusers(用户表),BBSsection(版块表),BBStopic(主贴表),BBSreply(跟帖表) 表结构 1)BBSusers 字段名 字段说明 数据类型 ...

  5. poj 1170 Shopping Offers

    Shopping Offers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4696   Accepted: 1967 D ...

  6. Struts2常规配置

    默认配置文件名:struts.xml   WEB-INF/classes下(放到src下) Struts2的有效常量可以查看    org\apache\struts2 下的    default.p ...

  7. javascript div跟随鼠标移动

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  8. HttpWebRequest 写入报错

    HttpWebRequest以UTF-8编码写入内容时发生“Bytes to be written to the stream exceed the Content-Length bytes size ...

  9. Java实现Http服务器(三)

    下面重点介绍上篇文章介绍的HttpServerImpl类当中的ServerImpl类 sun.net.httpserver.ServerImpl   600行左右的类,是整个HttpServer的核心 ...

  10. Mvc Model 模板的获取【学习笔记】

    MVC的Model模板有两种:一种编辑模式(@Html.EditorFor()).一种显示模式(Html.DisplayFor()). 模板的获取与执行(以下转自这里): 当我们调用HtmlHelpe ...