通化邀請賽 I Difference

2021-06-15 01:43:59 字數 907 閱讀 4551

這個題目現場賽的時候沒過,想得過於簡單了。

主要條件如下

(a) |ai| < t for all i and

(b) (vi, vj) in e <=> |ai-aj| >= t,

首先,如過存在邊,那麼ai和aj必然一正一負。所以第一步就是黑白染色。

之後不妨假設黑色的為正,白色為負,此時條件b中的絕對值號就可以去掉了。對於一堆的大於等於的約束,可以使用差分約束的方法來做。

對於其中的小於t的約束,變成小於等於t-1。如果spfa的時候使用整數的話,此處的t設為乙個300+的數字即可。

不擅長圖論,**略長……

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

const int intmax=0x3f3f3f3f;//notes:intmax

#define mem(a, val) memset(a, val, sizeof(a))//memset(

const int n = 310;

const int t = n;

int mat[n][n];

int mark[n];

int col[n];

int cas, n;

void fun(int i, int c)}}

}return true;

}bool judge(int n)

mem(dd, 0x3f);

int a, b;

for (int i=0; i}

}for (int i=0; i}

return spfa(n);

}int main()

if (judge(n))else

}return 0;

}

2013通化邀請賽H題

這題真無語,比賽時不會做,想了一場貪心演算法,沒想到是個區間dp,白刷了那麼多dp!比完賽回來,聽說是個區間dp,終於把題a了,但 寫得很搓,也不太好理解。後來發現這題竟然是白書上的例題!真是哭了 發現白書上記憶化搜尋的寫法很優雅,也比較好理解,就寫乙個吧。才50行的 dp a b c d 表示區間...

2013 吉林通化邀請賽 Tutor 有點坑的水題

計算12個數的和的平均數。四捨五入,不能有後導0。我的做法是,將答案算出後,乘以1000,然後看個位是否大於等於5,判斷是否要進製 include include include include includeusing namespace std define eps 1e 2 int main ...

湘潭邀請賽A

哥德 猜想 任一大於2的偶數,都可表示成兩個素數之和。是世界上最著名的未解問題之一,但是下面的反哥德 猜想 任一大於11的奇數,都可表示成兩個合數之和。確很容易證明。定義反哥德 分拆數g n 表示將大於11的奇數n分解為兩個合數之和的方案數。再定義sg n sum 即所有不大於n的奇數的反哥德 分拆...