[poj 1364]King[差分約束詳解(續篇)][超級源點][SPFA][Bellman-Ford]

題意

有n個數的序列, 下標為[1.. N ], 限制條件為: 下標從 si 到 si+ni 的項求和 < 或 > ki. 一共有m個限制條件. 問是否存在滿足條件的序列.

思路

轉化為差分約束, 就是

即 Si 為第 i 項的前綴和, 特別的 So 為0. 轉化不等式(連續子段和變為前綴和之差 > < 變為 >= <= ),求最短路, 判斷有沒有負權回路.

注意

由于并不知道圖是否連通

(不像是之前的那道Candies圖一定是聯通的,選擇班長所代表的點即可)

所以正常情況下是要另設一個"超級源點", 連接圖上的每個點, 從這個點出發就一定可以遍歷到每一個點.

"超級源點"到每個點的邊權是任意的,而它自己的點權自然是0.

這樣的話,就求出了一組滿足每對點的差盡可能大, 并且其中的d[0] = 0的解.

1. 將所有點(包括"超級源點")同時平移, 均為滿足所有約束的可行解(包括新加入的邊權們)

2. 將原圖中的所有點同時平移, 得到所有滿足原有約束的可行解. 但是仍有d[0] = 0的此時, 與超級源點的這些約束有可能不滿足. 但是顯然這是無所謂的.

3. 由此可知, 超級源點的作用就在于確保圖的連通性,使得每一個點都有一個"距離". 而"超級源點"帶來的額外約束一是d[0] = 0, 二是新加的邊權. 二者影響的都是d[1]到d[n]的浮動情況(d[0]是參考零點, 額外的邊權約束則是起到了限制d[1]到d[n]與d[0]的距離的作用,一堆不等式同樣是選擇了限制最嚴的那些并且距離盡可能大....沒有實際意義...)

總之參考零點就是這樣~

但是用SPFA只是判斷負環的話,只需要初始時將所有點入隊(而非只將源點入隊), 然后判斷每個點的入隊次數. 如果超過點的總數, 說明存在負環.否則不存在.

數值上是從INF開始減, 有負環的話就會一直減... 沒有的話就會正常退出, 當然這個時候d[ ] 值會很大..


SFPA + stack

?

//132K 16MS
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
const int MAXN = 105;
const int MAXE = 105;
const int INF = 0x3f3f3f3f;
struct pool
{int v,pre,w;
} p[MAXE];
int num,head[MAXN],d[MAXN],n,m,enq[MAXN];
bool inq[MAXN];
stack<int> s;
void clear()
{while(!s.empty())   s.pop();memset(head,0,sizeof(head));memset(d,0x3f,sizeof(d));memset(inq,false,sizeof(inq));memset(enq,0,sizeof(enq));num = 0;
}bool SPFA()
{for(int i=0;i<=n;i++){s.push(i);inq[i] = true;enq[i]++;}d[0] = 0;while(!s.empty()){int u = s.top();s.pop();inq[u] = false;for(int tmp=head[u],v;v=p[tmp].v,tmp;tmp=p[tmp].pre){int w = p[tmp].w;if(d[v]>d[u]+w){d[v] = d[u] + w;if(!inq[v]){inq[v] = true;enq[v]++;if(enq[v]>n+1)    return false;s.push(v);}}}}return true;
}void add(int u, int v ,int w)
{p[++num].v = v;p[num].w = w;p[num].pre = head[u];head[u] = num;
}int main()
{while(scanf("%d",&n)==1 && n){clear();scanf("%d",&m);while(m--){int si,ni,ki;char o,p;scanf("%d %d %c%c %d",&si,&ni,&o,&p,&ki);if(o=='g')  add(si+ni,si-1,-ki-1);else        add(si-1,si+ni,ki-1);}printf(SPFA()?"lamentable kingdom\n":"successful conspiracy\n");}
}

?

?

用Bellman-Ford也可以.這個時候就要用到超級源點啦

?

//120K 0MS
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 105;
const int MAXE = 210;
const int INF = 0x3f3f3f3f;
int s[MAXE],e[MAXE],w[MAXE];
int num,d[MAXN],n,m;void clear()
{memset(d,0x3f,sizeof(d));num = 0;
}bool Bellman_Ford()
{d[n+1] = 0;for(int i=0;i<=n+1;i++){for(int j=1;j<=num;j++){if(d[e[j]]>d[s[j]]+w[j])    d[e[j]] = d[s[j]] + w[j];}}for(int j=1;j<=num;j++){if(d[e[j]]>d[s[j]]+w[j])    return false;}return true;
}void add(int u, int v ,int c)
{s[++num] = u;e[num] = v;w[num] = c;
}int main()
{while(scanf("%d",&n)==1 && n){clear();scanf("%d",&m);while(m--){int si,ni,ki;char o,p;scanf("%d %d %c%c %d",&si,&ni,&o,&p,&ki);if(o=='g')  add(si+ni,si-1,-ki-1);else        add(si-1,si+ni,ki-1);}for(int i=0;i<=n;i++){add(n+1,i,0);}printf(Bellman_Ford()?"lamentable kingdom\n":"successful conspiracy\n");}
}

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388597.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388597.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388597.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux質控命令,Linux下microRNA質控-cutadapt安裝

如果Linux系統已安裝pip或conda&#xff0c;cutadapt的安裝相對簡便一些&#xff0c;示例如下&#xff1a;1.pip安裝pip install --user --upgrade cutadapt添加環境變量echo export PATH$PATH:/your path/cutadapt-1.10/bin >> ~/.bashrc2.conda安裝conda install -c b…

采用多播傳送FIX行情數據的推薦方案

理由FIX協議由一個會話層協議&#xff0c;一個應用層協議和一套域數據字典組成。后兩者不依賴于FIX會話。而且&#xff0c;由于FIX會話作為Point-to-point&#xff08;點-對-點&#xff09;通信&#xff0c;并不適合于發布/訂閱模式&#xff08;如為大量接收者提供市場數據&…

AJAX 異步加載技術

AJAX 異步 JavaScript 和 XML。 AJAX 是一種用于創建快速動態網頁的技術。 通過在后臺與服務器進行少量數據交換&#xff0c;AJAX 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下&#xff0c;對網頁的某部分進行更新。 傳統的網頁&#xff08;不使用 AJAX…

linux分辨率和用戶有關嗎,Linux系統在高分屏非正常分辨率顯示

問題描述&#xff1a;win10重裝為Ubuntu16.04&#xff0c;在1920x1080的顯示屏上&#xff0c;linux系統分辨率只有800x600xrandr # 查看當前顯示分辨率#輸出&#xff1a;[Screen 0: minimum 800 x 600, current 800 x 600, maximum 800 x 600]可以看出顯示屏最小為800x600&…

數據透視表和數據交叉表_數據透視表的數據提取

數據透視表和數據交叉表Consider the data of healthcare drugs as provided in the excel sheet. The concept of pivot tables in python allows you to extract the significance from a large detailed dataset. A pivot table helps in tracking only the required inform…

金融信息交換協議(FIX)v5.0

1. 什么是FIXFinancial Information eXchange(FIX)金融信息交換協議的制定是由多個致力于提升其相互間交易流程效率的金融機構和經紀商于1992年共同發起。這些企業把他們及他們的行業視為一個整體&#xff0c;認為能夠從對交易指示&#xff0c;交易指令及交易執行的高效電子數…

觀光公交

【問題描述】 風景迷人的小城 Y 市&#xff0c;擁有 n 個美麗的景點。由于慕名而來的游客越來越多&#xff0c;Y 市特意安排了一輛觀光公交車&#xff0c;為游客提供更便捷的交通服務。觀光公交車在第 0 分鐘出現在 1 號景點&#xff0c;隨后依次前往 2、3、4……n 號景點。從…

linux行命令測網速,Linux命令行測試網速的方法

最近給服務器調整了互聯網帶寬的限速策略&#xff0c;調到100M讓自己網站也爽一下。一般在windows上我喜歡用speedtest.net來測試&#xff0c;測速結果也被大家認可。在linux上speedtest.net提供了一個命令行工具speedtest-cli&#xff0c;用起來很方便&#xff0c;這里分享一下…

Delphi XE2獲取漢字拼音首字母

function CnPYIndex(const CnString: string): string;{ 返回中文的拼音首字母}const ChinaCode: array[0..25, 0..1] of Integer ((1601, 1636), (1637, 1832), (1833, 2077), (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000), …

圖像處理傅里葉變換圖像變化_傅里葉變換和圖像床單視圖。

圖像處理傅里葉變換圖像變化What do Fourier Transforms do? What do the Fourier modes represent? Why are Fourier Transforms notoriously popular for data compression? These are the questions this article aims to address using an interesting analogy to repre…

HDUOJ 1062 TEXT REVERSE

#include<iostream> #include<stdlib.h> #include <iomanip> #include<stack> using namespace std;int main(){//次數int n 0;while (cin >> n) {//這里需要讀一個字符&#xff0c;需要消除換行符的影響getchar();while (n--) {char c;stack&l…

VC++的windows服務

項目建立&#xff1a; VS2008->ATL項目->服務exe 服務部署&#xff1a; 在VS2008中新建的ATL項目&#xff0c;在網上看到的流程中都會有注冊服務這一項。 但是對服務的注冊都是只給了一個指令&#xff0c;一句話帶過&#xff0c;沒有給出具體的操作步驟 經過多次試驗…

linux中gradle編譯慢,【Linux】解決linux下android studio用gradle構建從jcenter或maven下載依賴太慢...

一個簡單的辦法&#xff0c;修改項目根目錄下的build.gradle&#xff0c;將jcenter()或者mavenCentral()替換掉即可&#xff1a;allprojects {repositories {maven{ url http://maven.oschina.net/content/groups/public/}}}但如果你有很多個項目的話&#xff0c;一個一個的改估…

MFC程序需要的函數庫及頭文件--《深入淺出MFC》

Windows程序調用的函數可分為2部分&#xff1a;C Runtimes Windows API。 C Runtimes&#xff1a; LIBC.LIB -- C Runtime函數庫的靜態鏈接版本 MSVSRT.LIB--C Runtime庫的動態鏈接版本&#xff08;如果要鏈接這一函數&#xff0c;你的程序執行時必須有MSVCRT40.DLL在場&#…

C#DNS域名解析工具(DnsLookup)

C#DNS域名解析工具(DnsLookup) DNS域名解析工具&#xff1a;DnsLookup 輸入域名后點擊Resolve按鈕即可。 主要實現代碼如下&#xff1a; private void btnResolve_Click ( object sender, EventArgs e ) {lstIPs.Items.Clear ( ); //首先把結果里的ListBox清空 try {IPHostE…

python.day05

一 字典 定義:dict, 以{},表示.每一項用逗號隔開,內部元素用key:value的形式來保存數據.例如 {"jj":"林俊杰","jay:周杰倫"} 特點:查詢效率非常高,通過key來查找元素 內部使用key來計算一個內存地址(暫時),hash算法,key必須不可變的數據類型(ke…

滯后分析rstudio_使用RStudio進行A / B測試分析

滯后分析rstudioThe purpose of this article is to provide some guide on how to conduct analysis of a sample scenario A/B test results using R, evaluate the results and draw conclusions based on the analysis.本文的目的是提供一些指南&#xff0c;說明如何使用R對…

Linux程序實現彈框,jQuery實現彈出框 效果絕對美觀

使用到JQeury寫的幾個比較好的Popup DialogBox,覺得不錯。和大家分享下。使用它們結合.net可以實現很好的效果。1.jqpopup:是個可以拖拽,縮放并可以在它上面顯示html頁面上任何一個控件組合的控件。可以和后面的主頁面通信。使用方法:先調用這幾個js文件,可以自提供的下載地址下…

Interesting visualization tools for profiling.

Interesting visualization tools for profiling. http://dtrace.org/blogs/brendan/2012/03/17/linux-kernel-performance-flame-graphs/ http://dtrace.org/blogs/brendan/2013/07/01/detecting-outliers/

MySQL的事務-原子性

MySQL的事務處理具有ACID的特性&#xff0c;即原子性&#xff08;Atomicity)、一致性&#xff08;Consistency&#xff09;、隔離性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;。 1. 原子性指的是事務中所有操作都是原子性的&#xff0c;要…