在c cpp 中怎麼實現下面這個演算法?

時間 2021-05-30 14:45:56

1樓:w2014

嘛…這個問題越看越圖論…所以試著給出了乙個做法…

首先我們重新表述此題如下:

有n(n<=100000)個點構成的一張圖,其中乙個點的權值為所有以它為頂點的邊的權值之和。

請問是否存在乙個給邊賦權值的方式,使得每個點的權值恰好為給定值。

我們記能這樣賦值的圖為「好圖」

首先,我們不難注意到如下引理:

如果連通圖G是二部圖,那麼G是好圖的充分必要條件是,G的兩部分點的權值相等。

證明略去。

接下來,考慮更一般的情況。

對於連通圖G=(V,E),我們取其中的乙個最大的二部圖G'=(V',E'),並對V'中頂點根據G'進行二染色。

易證V=V',證明略。也即G中所有頂點都被二染色。

考慮E''=E\E',其中的每一條邊都連線著同色的兩個頂點(否則可以把它加入G'中,使得G'變大)。而且邊的權值不超過兩個頂點權值中較小的那個。

記E''中邊的顏色為它連線的兩個頂點的顏色,邊的容量為G'連線的兩個頂點的權值的較小值。

如果兩種顏色點的總權值相等,那麼將E''中的邊全部賦值為0,即可由引理知,G是個好圖。

如果不相等,不妨設兩種顏色是黑色和白色,且黑色邊比白色多2k條(如果是奇數可以直接pass)

那麼,我們取E''中所有黑色邊。如果其總容量不少於2k,則我們可以在其中連線k條。則,這些邊提供了黑點上2k的權值,剩下的黑權值和白權值相等。

那麼通過引理知道,我們可以在G'中給邊賦值,使得點的權值等於去掉這k條邊帶來的權值後剩下的那些。合在一起,可得G是個好圖。

否則,G並不是好圖。

和樓下的回答一樣,時間複雜度同樣是 。

2樓:Yuxuan

理解的題意:

給定全0陣列 ,每次可以在 中任意選擇兩個位置+1, 問是否可以在有限次操作內使陣列 轉化另一給定陣列

那麼陣列 只需要滿足下面兩個條件

所以 中元素的和必須為偶數

2. 第乙個條件是顯然的。

第二個條件的必要性很好理解,充分性可以考慮一種構造,每次在陣列 中選最大的兩個元素-1,然後在次基礎上用數學歸納法。

前面的題意理解錯了,新的題意

給定全0陣列 ,每次可以在 中選擇給定的兩個位置+1, 問是否可以在有限次操作內使陣列 轉化另一給定陣列

(問題中沒有指出有多少對給定位置,這裡認為不超過 個)

我們考慮這樣的二元關係有 個,定義 表示我們選擇第 個關係進行+1操作的次數。

這樣我們可以得到 個線性方程組

直接用高斯消元法是不行的,但是這個方程組十分特殊,每乙個變數在方程組中均恰好出現2次,因此我們可以記錄每個變數出現在哪2行,用map記錄每一行有哪些引數. 這樣可以在 的時間內完成消元。 只要沒有出現矛盾,就是有解,否則就是無解。

upd:

可能還需要結合一下啟發式合併. 複雜度可能要更高一些.

這個成績在高中算基礎怎麼樣

冷月笙 英語和化學初中最好學好點,對於高中有大大的好處。但是物理嘛,說到物理我就難受,真的學不來。這麼跟你講,我初中物理最低69 一百分的卷子 高中最高66 生物講真的,高中生物跟初中生物沒有太大的聯絡,哦,還是有聯絡的,但是高中生物大多都是背的,初中沒學好對高中沒有太大影響 僅代表個人觀點 另外,...

在分布式系統中,怎麼memcache實現分布式鎖,可以實現嗎?

啊峰鍋 最近我對分布式鎖有所學習和思考,redis的incr或許是個不錯的嘗試。我也寫了如下例子 xiaodan zhuang Tim 的文章寫的很清楚了 Memcache mutex設計模式 官方也有指導文件 慕容行者 memcached可以用incr decr獲得鎖,用get set獲得鎖是不安...

「教」這個字在古詩詞中怎麼讀

杜若致遠 孫玉文先生 漢語變調構詞考辨 漢語變調構詞考辨 孫玉文著,商務印書館2015年1月第1版 考辨 考辨 考辨 考辨 考辨 在舊詩這一類中 有時還可以通過格率判斷。此外就是所謂 據誼求音 由用法定讀音。 木十乂 讀音這個事如果不是為了搞學術研究的話真就是沒必要糾結。畢竟有些字怎麼讀連專家學者都...