LA 4255 Guess

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2256

题意:给定一串数字a1,a2....an,给出sij的正负数值。sij代表ai+...aj的大小。求一组结果满足此条件。-10<=ai<=10.

思路:

设:Bi = a1+ a2 + ... ai,则,我们可以求出Bj和Bi-1的大小关系。可以由大到小连一条有向边,对此有向图做拓扑排序。

拓扑排序的做法如下:我们规定节点初始值:Bk =0(这只是一个相对值,事实上我们求的ai是Bi与Bi-1的差值,所以Bi初始是什么都没有关系,我们求得是相对差).

如果Bi 向Bj有一条有向边,那么Bi>Bj,说明Bi至少比Bj大1,我们用v[k]记录Bk的值,不断调整此数值。最终就能求得一组解。

#include 
#include 
#include 
#include 
#include 

using namespace std;

#define Maxn 20
vector g[Maxn];
int indeg[Maxn],v[Maxn];
int n;

void init()
{
	for(int i=0;i q;
	for(int i=0;i<=n;i++)
	{
		if(indeg[i] == 0) q.push(i);
	}
	while(!q.empty())
	{
		int s = q.front();
		q.pop();
		for(int i=0;i



你可能感兴趣的:(Algorithm_排序,Algorithm_图论)