題目大意:美國佬打算入侵火星,火星上有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 #includeview code3 #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 }
matlab解決有約束條件的二次規劃問題
在數學建模與生活實際問題中,我們經常會遇到 優化問題 而所謂 優化 就是對於乙個目標函式,在給定一些等式或不等式的約束後,求極值的過程。高中學的 線性規劃 就是一種簡單的優化問題。現在我們來看,如何將相對複雜一點的 二次規劃問題 quadratic programming 在matlab中得以解決。...
列舉mysql的約束條件 MySql約束條件彙總
約束條件約束條件是在表上強制執行的資料檢驗規則 用來保證建立的表的資料完整性和準確性 主要在兩方面對資料進行約束 空值和重複值 主鍵約束 primary key 每個表只能由乙個主鍵 主鍵值須非空不重複 可設定單字段主鍵,也可設定多欄位聯合主鍵 聯合主鍵中多個欄位的取值完全相同時,才違反主鍵約束 新...
基於約束條件的SQL攻擊
目前值得高興的是,開發者在建立 時,已經開始關注安全問題了 幾乎每個開發者都知道sql注入漏洞了。在本文中,我將為讀者介紹另一種與sql資料庫相關的漏洞,雖然它的危害性與sql注入不相上下,但目前卻很少為人所知。接下來,我將為讀者詳細展示這種攻擊手法,以及相應的防禦策略。背景知識 最近,我遇到了一段...