(題目鏈結)
一張無向圖,每個節點被k個節點保護,想要走到乙個節點當且僅當它不被保護。你可以從1號節點放出無限個炸彈去炸毀節點,問最少需要多久才可以炸毀n號節點。
昨天考試題。
一看就是最短路然後帶一些特殊處理,怎麼特殊處理呢?我們使用dijkstra來做這道題,因為spfa可以重複入隊,所以是錯誤的。每次出堆的點,將它保護的節點的「保護度數」減1並更新被保護節點的dis(取max),如果某個節點的度數已經被減成了0,並且它的dis不是inf,也就是說已經有乙個炸彈在這個節點蓄勢待發了,我們將這個節點加入堆中。做完減少度數操作後,就是正常的dijkstra的入堆操作了,記得只有「保護度數」為0的點才能入堆。
鄰接表的陣列開成了節點個數的大小→_→
// bzoj1922#include#include#include#include#include#include#include#include#define ll long long
#define inf 1e18
#define pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;
const int maxn=5010,maxm=100010;
struct edge e[maxm<<1];
struct data
};ll dis[maxn];
int head[maxn],vis[maxn],r[maxn];
int cnt,n,m;
vectorv[maxn];
void link(int u,int v,int w)
void dijkstra() );
while (!q.empty() && !vis[n]) );
}} }
}int main()
for (int i=1;i<=n;i++)
} dijkstra();
printf("%lld",dis[n]);
return 0;
}
bzoj1922 Sdoi2010 大陸爭霸
傳送門 我們假設d1 i 表示機械人到達i的最短時間 d2 i 為結界消失的最短時間 則乙個點可以被訪問到的最短時間為max d1 i d2 i 我們跑一遍最短路 等到該節點滿足條件就向外擴充套件 include include include include include include def...
1922 Sdoi2010 大陸爭霸
time limit 10 sec memory limit 64 mb submit 1552 solved 682 submit status discuss 在乙個遙遠的世界裡有兩個國家 位於大陸西端的傑森國和位於大陸東端的 克里斯國。兩個國家的人民分別信仰兩個對立的神 傑森國信仰象徵黑暗和毀...
Bzoj 2726 SDOI 任務安排
memory limit 131072kb 64bit io format lld llu description 機器上有n個需要處理的任務,它們構成了乙個序列。這些任務被標號為1到n,因此序列的排列為1,2,3.n。這n個任務被分成若干批,每批包含相鄰的若干任務。從時刻0開始,這些任務被分批加工...