额。题目大意:有N个球。编号和重量都是唯一不重复的。然后。给你m个pair a和b,表示编号为a的点一定比编号为b的点轻。然后捏、输出每个点对应的重量。关键是要求。如果有多种可能性的话,输出让序号小的点重量也尽量小的ans....而且先满足1号。再二号。and so on....那么问题来了。如果我们按照编号从小到大开始拓扑、然后每次对编号小的球赋给当前最小重量的话。T_T。貌似无法保证所有的球从小到大开始编号小则重量尽量小、比如说、第一次 入度为0得点有3 4 5 那么赋给了3重量1.第二次入度为0的点有2 4 5.那么。只能赋给2重量2了。如果再下次是4  5的话、赋给4 号球 重量3、再下次是1 5.赋给1号球重量4.但实际上这说明4——>1、而3 4 5 是并列关系。那就是先满足4的话就可以让1号球最小喽。恩。。是这样滴、、、

代码也灰常简单。就是按照入度为0的点的顺序来。貌似这就是拓扑排序。。2333333333333好吧。。我是很无知地。。。以为拓扑排序一定会用到邻接表形式。加一条边的insert函数。、T_T

附代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#define maxn 210
#define maxm 41000
using namespace std;

int digree[maxn];
int map[maxn][maxn];
int ans[maxn];
int vis[maxn];
int n, m;

void init()
{
    memset(digree, 0, sizeof(digree));
    memset(map, 0, sizeof(map));
    memset(vis, 0, sizeof(vis));
}

void topsort()
{
     for (int i=n; i>=1; --i)
     {
         int k = -1;
         for (int j=n-1; j>=0; --j)
         {
             if (!vis[j] && digree[j] == 0)
             {
                 k = j;
                 break;
             }
         }
         if (k == -1)
         {
             cout << "-1\n";
             return;
         }
         vis[k] = 1;
         ans[k] = i;
         for (int j=0; j<n; ++j)
         {
             if (map[k][j])
             digree[j]--;
         }
     }
     cout << ans[0];
     for (int i=1; i<n; ++i)
     {
        cout << ' ' << ans[i];
     }
     cout << endl;
}

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        cin >> n >> m;
        init();
        for (int i=0; i<m; ++i)
        {
            int a, b;
            cin >> a >> b;
            a--; b--;
            if (!map[b][a])
            {
               map[b][a] = 1;
               digree[a]++;
            }
        }
        topsort();
    }
    return 0;
}

POJ 3687 逆序拓扑的更多相关文章

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

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

  2. poj 3687 Labeling Balls(拓扑排序)

    题目:http://poj.org/problem?id=3687题意:n个重量为1~n的球,给定一些编号间的重量比较关系,现在给每个球编号,在符合条件的前提下使得编号小的球重量小.(先保证1号球最轻 ...

  3. Labeling Balls POJ - 3687 优先队列 + 反向拓扑

    优先队列 + 反向拓扑 //#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include ...

  4. H - Buy Tickets POJ - 2828 逆序遍历 树状数组+二分

    H - Buy Tickets POJ - 2828 这个题目还是比较简单的,其实有思路,不过中途又断了,最后写了一发别的想法的T了. 然后脑子就有点糊涂,不应该啊,这个题目应该会写才对,这个和之前的 ...

  5. poj 3687 Labeling Balls【反向拓扑】

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

  6. POJ 1840 Brainman(逆序对数)

    题目链接:http://poj.org/problem?id=1804 题意:给定一个序列a[],每次只允许交换相邻两个数,最少要交换多少次才能把它变成非递降序列. 思路:题目就是要求逆序对数,我们知 ...

  7. POJ 2541 Binary Witch(逆序KMP,好题)

    逆序KMP,真的是强大! 参考链接,下面有题意解释:http://blog.sina.com.cn/s/blog_6ec5c2d00100tphp.htmlhttp://blog.csdn.net/s ...

  8. (字符串的处理4.7.16)POJ 1159 Palindrome(让一个字符串变成回文串需要插入多少个字符...先逆序,在减去公共子序列的最大长度即可)

    /* * POJ_1159.cpp * * Created on: 2013年10月29日 * Author: Administrator */ #include <iostream> # ...

  9. poj 2828 Buy Tickets【线段树单点更新】【逆序输入】

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 16273   Accepted: 8098 Desc ...

随机推荐

  1. 转-Android Studio *.jar 与 *.aar 的生成与*.aar导入项目方法

    主要讲解Android Studio中生成aar文件以及本地方式使用aar文件的方法. 在Android Studio中对一个自己库进行生成操作时将会同时生成*.jar与*.aar文件. 分别存储位置 ...

  2. Win7_SendTo文件夹

    Win7系统浮动sendto目录现在被移到了这里 : %APPDATA%\Microsoft\Windows\SendTo %APPDATA%是个环境变量,具体来说是在这里: C:\users\??? ...

  3. spring 好处与优点

    使用Spring有什么好处?(1)Spring能有效地组织你的中间层对象.(2)Spring能消除在许多工程中常见的对Singleton的过多使用.(3)Spring能消除各种各样自定义格式的属性文件 ...

  4. (二)stm32之中断配置

    一.stm32的中断和异常 Cortex拥有强大的异常响应系统,它能够打断当前代码执行流程事件分为异常和中断,它们用一个表管理起来,编号为0~15为内核异常,16以上的为外部中断,这个表就是中断向量表 ...

  5. WDS的原理

    WDS的原理 WDS 即 Wireless Distribution System,是无线网络部署延展系统的简称,指用多个无线网络相互联结的方式构成一个整体的无线网络.简单地说,WDS就是利用两个(或 ...

  6. 【linux命令】:查看当前登录用户的信息,本文介绍3种方法

    作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动.有些时候,你甚至需要知道他(她)们正在做什么.本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法. 1. 使用w ...

  7. IE浏览器GET传参后台乱码

    ie里面 get传递的字符串 为 gb2312  ,后台用的是utf-8类型  所以用 POST传递字符串到后端 否则进行js参数转码 encodeURI(""); 后端解码

  8. 自定义MVC Html

    自定义ASP.NET MVC Html辅助方法 在ASP.NET MVC中,Html辅助方法给我们程序员带来很多方便,其重要性也就不言自明.有时候,我们不想重复地写一些HTML代码,或者MS没有提供我 ...

  9. 原!! java直接打印一个对象时,并不是直接调用该类的toString方法 ,而是会先判断是否为null,非null才会调用toString方法

    网上看了好多java直接打印一个对象时,直接调用该类的toString方法 . 但是: Object obj=null; System.out.println(obj);//没有报错 System.o ...

  10. 转!!java泛型概念(泛型类,接口,方法)

    一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(Stri ...