POJ PKU 3275 Folyd
(2010-09-20 21:30:54)
标签:
pojpku3275folydit |
分类: 图论 |
题目描述:
一个人想给n个东西排序,已经知道m个关系。每个关系用a,b表示a大于b。
问他最少还需要多少个关系能把这n个东西排序。
解题报告:
排序的话,一共会有n * (n – 1) / 2个关系。只要知道当前的m个关系一共能确定多少关系(sum个),拿n * (n – 1) / 2减去sum就是答案。
Folyd即可,k,i,j,relation[i][j] = relation[i][j] || relation[i][k] && relation[k][j]。
这样就可以得到m个关系确定的所有关系。
注意可以优化:每一个数的出点和入点可以用邻接表vector存
for(int k = 1; k <= n; k++)
这样的。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
#define SIZE 1001
int n, m, a, b;
bool g[SIZE][SIZE];
vector<int> out[SIZE],
in[SIZE];
int main()
{
}