BZOJ 5047 空間傳送裝置

2022-03-25 22:20:40 字數 2313 閱讀 4028

time limit: 20 sec  memory limit: 256 mb

submit: 282  solved: 121

[submit][status][discuss]

description

太空中一共有n座星球,它們之間可以通過空間傳送裝置進行轉移。空間傳送裝置分為m種,第i種裝置可以用4個參

數a_i,b_i,c_i,d_i來描述。因為時空抖動的問題,在非整數時刻禁止使用空間傳送裝置。如果在整數s時刻使用裝

置,那麼需要花費((a_i*s+b_i) mod c_i)+d_i單位時間才能完成傳送。現在是s時刻,小q位於1號星球,請寫乙個

程式計算從1號星球到每個星球最少需要的時間。

input

第一行包含4個正整數n,m,s,e(2<=n<=100000,1<=m<=50,1<=s<=2000,1<=e<=200000)

分別表示星球的個數、空間傳送裝置的種類數、當前的時間以及空間傳送裝置的個數。

接下來m行,每行4個正整數a_i,b_i,c_i,d_i(1<=a_i,b_i,c_i,d_i<=2000),依次描述每種裝置的引數。

接下來e行,每行3個正整數u_i,v_i,w_i(1<=u_i,v_i<=n,u_i!=v_i,1<=w_i<=m)

表示從星球u_i可以使用第w_i種裝置單向傳送到星球v_i。

output

輸出n-1行,每行乙個整數,第i行表示從1到i+1的最少所需時間,若無解輸出-1。

sample input

3 2 1 3

1 1 5 1

2 2 7 1

1 2 1

2 3 2

3 1 1

sample output

3

6hint

1到3:在時刻1使用第一種裝置從1傳送到2,花費時間3,再等待2單位時間,於時刻6使用第二種裝置到達3,花費時間1。

題解:

①首先要發現問題具有週期性(產生原因:取模操作)

②由於裝置數很小,所以可以記錄取模的狀態: d[i][j]表示第i個機器在時間%c[i]為j的情況下從乙個點走到另乙個點所需要花費的時間(時間=等候時間+行走時間)

③上述陣列維護前字尾最小值,預處理得出

④最後進行一遍最短路就可以了

⑤貪心成立的依據:時間盡量小不會有壞處

#include#include#include#define go(i,a,b) for(int i=a;i<=b;i++)

#define ro(i,a,b) for(int i=a;i>=b;i--)

#define fo(i,a,x) for(int i=a[x],v=e[i].v;i;i=e[i].next,v=e[i].v)

using namespace std;const int n=100003;

int n,m,s,t;

int a[n],b[n],c[n],d[n];

int head[n],k=1,u,v,w;

int val[n],lef[n],rig[n],d[60][2007];

queueq;bool inq[n];int dis[n];

struct ee[n<<1];

void add(int u,int v,int w);head[u]=k++;}

int main()

go(i,2,n)dis[i]=1000000000;

dis[1]=s;q.push(1);int u;

while(!q.empty())

{ inq[u=q.front()]=0;q.pop();

fo(i,head,u)if(dis[u]+d[e[i].w][dis[u]%c[e[i].w]]就像這時的我滿懷悲傷,唱著這段無人喝彩的旋律……——汪峰《再見蒲公英》

Bzoj1013 Jsoi2008球形空間產生器

竟然會想去用隨機艹這道題。太年輕 實際上兩個點與座標列乙個方程,高斯消元解這n個方程組就好了。講道理隨機也可以過的吧?主要是不好找乙個單調的狀態來退火或者爬山 因為超出圓範圍外無限遠處到所有點距離也相等,但並不是圓心。大概可以先用到所有點距離和來爬一下山,最終點就肯定在圓裡,在小步小步的爬山,強制使...

bzoj4415 Shoi2013 發牌 線段樹

相當於找區間第k個數,同時支援刪點 這個題的線段樹操作和noid1t1有點像。所以調了半天。注意對size取模,注意查詢區間第k的時候的特判 碼 include includeusing namespace std define zuo o 1,l,mid define you o 1 1,mid ...

BZOJ4419 SHOI2013發微博(平衡樹)

好友狀態的變化次數不會超過m,於是考慮暴力,對每個人記錄其好友關係的變化,通過字首和計算貢獻。這需要查詢一段字首時間內某人發的微博數量,可以離線建一棵絕對平衡的平衡樹。事實上完全可以線性。include include include include include include include ...