uva La 4255 Guess (拓撲排列)

2021-06-21 02:56:06 字數 1977 閱讀 1590

uva la 4255 guess (拓撲排列)

拓撲排列適用於dag有向無環圖。

構造所有節點之間的單向邊。

具體問題中,抽象出點和邊(單向邊),單向邊對應於具體的點之間的大小關係或需求關。

構造出圖後,問題中的所有的關係都可以用點之間的有向邊表示。

此題中。

(1)將每個數字構造成點時,不易表示。

將字首和構造成點,而所有的區間和都可以有兩個字首的差得到。則由所有區間和正負或為0,可以得到不同字首之間的大小關係,即個點之間的單向邊。

(2)注意到可能為零,表示2個字首值相等,即圖中可能有兩點成環。

處理方法:

dis[i][j]  = 0,表示相等,1表示i-->j,-1表示j--i.

每次得到乙個點時,將所有的dis = 0,的點取出賦相同的值。

//#pragma warning (disable: 4786)

//#pragma comment (linker, "/stack:16777216")

//head

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

//loop

#define fe(i, a, b) for(int i = (a); i <= (b); ++i)

#define fd(i, b, a) for(int i = (b); i>= (a); --i)

#define rep(i, n) for(int i = 0; i < (n); ++i)

#define clr(a,value) memset(a,value,sizeof(a))

#define cpy(a, b) memcpy(a, b, sizeof(a))

#define fc(it, c) for(__typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)

//input

#define ri(n) scanf("%d", &n)

#define rii(n, m) scanf("%d%d", &n, &m)

#define riii(n, m, k) scanf("%d%d%d", &n, &m, &k)

#define rs(s) scanf("%s", s)

//output

#define wi(n) printf("%d\n", n)

#define ws(s) printf("%s\n", s)

typedef long long ll;

const int inf = 1000000007;

const double eps = 1e-10;

const int maxn = 20;

int t, n;

int suf[maxn];

int dis[maxn][maxn];

int du[maxn];

vectora;

void solve()

}val++;

tot += a.size();

for (int j = 0; j < a.size(); j++)

for (int j = 0; j < a.size(); j++)

du[a[j]] = -1;}}

}int x = suf[0];

for (int i = 0; i <= n; i++)

suf[i] -= x;

for (int i = 1; i <= n; i++)

puts("");

}int main ()

else if (x == '+')}}

solve();

}return 0;

}

UVALive 4255 拓撲排序 構造

傳送門 思路 連續和轉化為字首和之差。可以將問題轉化為已知序列 a1,a2,an 的大小關係,求出任意一組滿足條件的序列。拓撲排序即可。我是以sum大指向sum小的方向建邊。假設入度為零的點即最大值點的值為0,那麼後面的點比它小就小1。注意sum 0 0,0也要跑。includeusing name...

la4255 Guess 差分約束

這道題目我的做法是差分約束,具體地,設s i 表示1.i的乙個字首和,那麼對於輸入的a x y 如果a x y 說明s y 比s x 1 要大,s y s x 1 s y s x 1 1,所以從x 1到y連一條長度為1的邊 如果a x y 說明s y 比s x 1 要大,s y 1,所以從y到x 1...

UVALive 4255 字首和 拓撲排序

題意 定義 解法 首先根據連續和轉化為字首和之差的思想,設 include using namespace std const int maxn 15 int f maxn maxn int topo maxn int vis maxn temp int n int b maxn bool dfs ...