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 ...