CSS——flex佈局最後一行列表左對齊的N種方法
阿新 • • 發佈:2020-08-28
資源限制
時間限制:1.0s 記憶體限制:256.0MB
問題描述
1 3
2 3
3 4
3 5
4 5
5 6
1 6 樣例輸出 2 這題用深搜就可,先深搜判斷詢問的兩點間是否連通(因為1 <= u, v <= n,所以令要排除測試的點為0即可判斷),若連通,則一個個點做排除測試,若排除該點後可行路徑數為0,那麼說明這是一個關鍵點,危險係數df加一. 注意剪枝,一旦發現該點不是關鍵點,就直接終止測試.
抗日戰爭時期,冀中平原的地道戰曾發揮重要作用。
地道的多個站點間有通道連線,形成了龐大的網路。但也有隱患,當敵人發現了某個站點後,其它站點間可能因此會失去聯絡。
我們來定義一個危險係數DF(x,y):
對於兩個站點x和y (x != y), 如果能找到一個站點z,當z被敵人破壞後,x和y不連通,那麼我們稱z為關於x,y的關鍵點。相應的,對於任意一對站點x和y,危險係數DF(x,y)就表示為這兩點之間的關鍵點個數。
本題的任務是:已知網路結構,求兩站點之間的危險係數。
輸入格式輸入資料第一行包含2個整數n(2 <= n <= 1000), m(0 <= m <= 2000),分別代表站點數,通道數;
接下來m行,每行兩個整數 u,v (1 <= u, v <= n; u != v)代表一條通道;
最後1行,兩個數u,v,代表詢問兩點之間的危險係數DF(u, v)。
輸出格式 一個整數,如果詢問的兩點不連通則輸出-1. 樣例輸入 7 61 3
2 3
3 4
3 5
4 5
5 6
1 6 樣例輸出 2 這題用深搜就可,先深搜判斷詢問的兩點間是否連通(因為1 <= u, v <= n,所以令要排除測試的點為0即可判斷),若連通,則一個個點做排除測試,若排除該點後可行路徑數為0,那麼說明這是一個關鍵點,危險係數df加一. 注意剪枝,一旦發現該點不是關鍵點,就直接終止測試.
1#include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 #include <string> 6 #include <cmath> 7 #include <map> 8 #include <algorithm> 9 #define INF 0x3f3f3f3f 10 #define zero 1e-7 11 12 using namespace std; 13 typedef longlong ll; 14 const ll mod=1e9+7; 15 const ll max_n=1005; 16 17 struct node { 18 int u, v; 19 }e[max_n<<1]; 20 21 int n, m;//站點數,通道數 22 int su, sv;//詢問的兩點 23 int ans=0;//排除某點後可行的路徑數 24 bool vis[max_n]={false};//標記是否訪問過 25 bool flag[max_n]={false};//標記改點是否排除測試過 26 27 void dfs(int s, int del) {//源點,要排除測試的點 28 vis[s]=true; 29 for(int i=0; i<m; i++) { 30 if(e[i].u==s && !vis[e[i].v] && e[i].v!=del) { 31 if(e[i].v==sv) 32 ans++; 33 else 34 dfs(e[i].v, del); 35 } 36 if(e[i].v==s && !vis[e[i].u] && e[i].u!=del) { 37 if(e[i].u==sv) 38 ans++; 39 else 40 dfs(e[i].u, del); 41 } 42 if(ans) return;//一旦找到排除點del後仍能使詢問的兩點連通的路徑,即del不是關鍵點,則直接終止測試 43 } 44 vis[s]=false; 45 } 46 47 int main() { 48 cin>>n>>m; 49 int df=0; 50 for(int i=0; i<m; i++) { 51 cin>>e[i].u>>e[i].v; 52 } 53 cin>>su>>sv; 54 dfs(su, 0);//先判斷不排除任何點時,詢問的兩點是否連通 55 if(!ans) df=-1;//若詢問的兩點不連通則令df=-1 56 else { 57 for(int i=1; i<=n; i++) { 58 ans=0; 59 if(i!=su && i!=sv && !flag[i]) { 60 flag[i]=true; 61 memset(vis, false, sizeof vis);//注意要重新初始化 62 dfs(su, i); 63 if(!ans) df++; 64 } 65 } 66 } 67 cout<<df<<endl; 68 return 0; 69 } 70 /* 71 5 4 72 1 3 73 2 3 74 1 4 75 4 5 76 2 5 77 78 3 79 */