序列(差分約束 鏈式向前星)

2021-09-25 21:23:24 字數 1193 閱讀 1113

傳送門:洛谷-p1645

有乙個整數序列,它的每個數各不相同,我們不知道它的長度是多少(即整數個數),但我們知道在某些區間中間至少有多少個整數,用區間(li,ri,ci)來描述,表示這個整數序列中至少有ci個數來自區間[li,ri],給出若干個這樣的區間,問這個整數序列的長度最少能為多少?

第一行乙個整數$n$,表示區間個數;

接下來$n$行,每行三個整數$(l_i,r_i,c_i)$,描述乙個區間。

【資料規模】

$n<=1000,\ \ \ 0<=l_i<=r_i<=1000,\ \ \ 1<=c_i<=r_i-l_i+1$

僅乙個數,表示該整數序列的最小長度。

123

4567

891011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

3839

4041

4243

4445

4647

4849

5051

#include

using

namespace

std;

#define crl(a,x) memset(a,x,sizeof(a))

int begin[5005],n,n,dis[1005],vis[1005]=; //注意邊的數量

struct

node;

vector

edge;

void

add(int x,int y,int z)

;begin[x]=edge.size();

edge.push_back(tem);

}void

spfa

(int s)}}

}}intmain

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

spfa(0);

cout

return0;}

鏈式向前星

我們首先來看一下什麼是前向星.前向星是一種特殊的邊集陣列,我們把邊集陣列中的每一條邊按照起點從小到大排序,如果起點相同就按照終點從小到大排序,並記錄下以某個點為起點的所有邊在陣列中的起始位置和儲存長度,那麼前向星就構造好了.用len i 來記錄所有以i為起點的邊在陣列中的儲存長度.用head i 記...

鏈式向前星 學習理解

學習內容 鏈式向前星 真的說實話這東西不太難,但是看了一圈部落格都講得好奇怪啊,完全不像在講東西。好在看了一篇不錯的部落格 第一部分 儲存 int head ma int n,cnt 0 struct node edge ma 第二部分 新增邊 void add int u,int v,int w ...

鏈式向前星(陣列模擬鄰接表)

有的時候有的圖可能比較稀疏而且點數較多,鄰接矩陣存不下,所以就要用到鄰接表。鄰接錶用vector陣列比較方便,但是vector比較慢。所以就有了鏈式向前星。include include include using namespace std 鏈式向前星其實就是有n鍊錶,每條鍊錶存的是所有相同結點的...