额。题目大意:有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. linux终端vi同时显示多个文件的分屏操作及切换操作

    以前看到那边分屏操作的觉得很高端,现在初步整理了一下. 这里不是那个用代码实现的分屏,完全属于linux的操作命令 一.打开并显示文件 1.打开 这个不用说了,就是vi xx.c,或者vi xx1.c ...

  2. poj3347Kadj Squares

    链接 这题其实与几何没太大关系,还不错的题目. 参考吴永辉的算法设计书. 用lefi.rigi分别表示正方形在x轴上的投影. 为了避免用小数,把边长都扩大sqrt(2)倍,这样lef1 = 0,rig ...

  3. JS自总结

    1.js获得当前元素   event.srcElement:   获取当前父元素   event.srcElement.parentElement   var rowIndex = e.parentE ...

  4. 百度编辑器Ueditor的简单调用

    先去ueditou.baidu.com网站下载百度编辑器,放到项目根目录下的Data目录中,然后引入文件 <!DOCTYPE html> <html lang="en&qu ...

  5. C++ 多线程中的一个抛出异常

    试了一下,和Java完全不同. 注意Java和C++对于多线程里面的一个线程抛出异常的影响,完全不同. Java里面,对于主线程和其他线程完全不受影响: C++里面,整个程序会退出,所有线程都会受影响 ...

  6. 5.2 i++

    答案:第一段21,第二段12 PS:注意运算符的优先级. 答案:A

  7. 批处理+VBS+注册表实现开机自动启动EXE程序

    批处理+VBS+注册表实现WINDOWS开机自动启动EXE程序 以下都是基于WINDOWS系统. 我们都知道当我们有想某个程序在开机时自动运行,只能有三个方式: 1.做成服务,然后对服务进行配置为自动 ...

  8. tinyXml直接解析XML字符串

    一直都用tinyxml直接LoadFile来解析XML,发现原来也可以直接解析XML字符串. XML文件: <?xml version=\"1.0\" encoding=\& ...

  9. java 多线程2

    class MyThread extends Thread { @Override public void run() { super.run(); for (int i = 0; i < 50 ...

  10. 有关mipmaps

    Mipmaps的作用是什么,仅仅是为了使屏幕三角形和纹理三角形的差异变小?有没有以空间换时间的理念? Mipmaps在生成一系列小的纹理样本时, 是如何从原始纹理采样的?即如何生成这些小的纹理样本.