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 ...