hdu3873 有約束條件的最短路

2022-08-24 21:06:14 字數 1864 閱讀 8040

題目大意:美國佬打算入侵火星,火星上有n個城市,有些城市可能受其他城市保護,

如果i城市受j城市保護,那麼你必須先攻占j城市才能再攻占i城市,問你攻占城市n的最短時間是多少。

資料解釋:

給定t, 表示有t組資料

給定n,m 表示n個點,m條邊

接下來m條有向邊, a,b,c  表示從a到b,距離為c

接下來n行, 每行第乙個整數d,然後接下來是d個整數,x1,x2,...xd, 表示第i個城市受d個城市保護,表示只有城市x1,x2...xd都被攻占,城市i才能被攻占

問從點1到達點n的最短時間(一定是可達的)

重要的一點是,因為是軍隊,所以可以同時進軍多個點。

思路:如果城市i受其他城市保護, 那麼攻占城市i的最短時間是從1-->i和攻占城市i的保護城市  這兩個時間中的最大值。

設dist[i] 為 攻占城市i的最短時間,  maxn[i] 為攻占所有保護i的城市中時間最長的那個

那麼 dist[i] = max(dist[i],maxn[i])

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include

11 #include

12 #include 13

using

namespace

std;

14#pragma warning(disable:4996)

15 typedef long

long

ll;16

const

int inf = 1

<< 30;17

/*18

19*/

20struct

edge

2127

};28 vectorg[3000 + 10

];29 vector pro[3000 + 10

];30

bool vis[3000 + 10

];31

int protect[3000 + 10

];32

int dist[3000 + 10], maxn[3000 + 10], ans[3000 + 10

];33

void dij(int

n)34

41 dist[1] = 0

;42 priority_queueq;

43edge cur, tmp;

44 cur.to = 1

;45 cur.dist = 0;46

q.push(cur);

47while (!q.empty())

4858 vis[x] = true;59

for (int i = 0; i < g[x].size(); ++i)

6065

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

667576}

77}78}

7980

void input(int &x)

8191}92

intmain()

93106

for (i = 0; i < m; ++i)

107114

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

115125

}126

dij(n);

127 printf("

%d\n

", dist[n]);

128}

129return0;

130 }

view code

matlab解決有約束條件的二次規劃問題

在數學建模與生活實際問題中,我們經常會遇到 優化問題 而所謂 優化 就是對於乙個目標函式,在給定一些等式或不等式的約束後,求極值的過程。高中學的 線性規劃 就是一種簡單的優化問題。現在我們來看,如何將相對複雜一點的 二次規劃問題 quadratic programming 在matlab中得以解決。...

列舉mysql的約束條件 MySql約束條件彙總

約束條件約束條件是在表上強制執行的資料檢驗規則 用來保證建立的表的資料完整性和準確性 主要在兩方面對資料進行約束 空值和重複值 主鍵約束 primary key 每個表只能由乙個主鍵 主鍵值須非空不重複 可設定單字段主鍵,也可設定多欄位聯合主鍵 聯合主鍵中多個欄位的取值完全相同時,才違反主鍵約束 新...

基於約束條件的SQL攻擊

目前值得高興的是,開發者在建立 時,已經開始關注安全問題了 幾乎每個開發者都知道sql注入漏洞了。在本文中,我將為讀者介紹另一種與sql資料庫相關的漏洞,雖然它的危害性與sql注入不相上下,但目前卻很少為人所知。接下來,我將為讀者詳細展示這種攻擊手法,以及相應的防禦策略。背景知識 最近,我遇到了一段...