luogu p1119 災後重建
少用memset(),不然吃虧在後邊。
在floyd在如果有些點不能走,等價於它們不能作中轉點,這樣就滿足了時效性,也就滿足了在變化的圖中求任意兩點的最短路
1 #include2 #include3 #include4 #include5 #include6 #include7 #includeview code8 #include9 #include10 #include11
#define inf 2147483647
12#define ls rt<<1
13#define rs rt<<1|1
14#define lson ls,nl,mid,l,r
15#define rson rs,mid+1,nr,l,r
16#define n 100010
17#define for(i,a,b) for(long long i=a;i<=b;i++)
18#define p(a) putchar(a)
19#define g() getchar()
2021
using
namespace
std;
2223
long
long f[310][310
];24
long
long
n,m,x,y,c;
25long
long t[500100
];26
long
long
k,q;
2728
void
in(long
long &x)
35while(c<='
9'&&c>='0'
)38 x*=y;39}
40void o(long
long
x)45
if(x>9)o(x/10
);46 p(x%10+'0'
);47}48
intmain()
62 for(i,0,n-1
)63 f[i][i]=0;64
65in
(q);
6667 for(ii,1
,q)75
if(f[x][y]==inf||t[x]>c||t[y]>c)
76 o(-1
);77
else
78o(f[x][y]);
79 p('\n'
);80}81
return0;
82 }
luogu P1119 災後重建
接近弗洛伊德板子,唯一的不同點是對每組 i j k 特判一下在給定時間內三點間的道路是否修建完成。而且由於給出的t都單調不減,那麼顯然在詢問較大的t時,比其更小的t時的狀態已經維護過一遍,因此可以記錄維護時間的最大值。每次詢問時用while sign 複雜度為o n 3 luogu judger e...
P1119 災後重建
原題鏈結 一開始直接想跑最短路 看了看詢問次數 放棄了 然後果斷看了題解 floyd 用啥都不會用它的好嗎 平常的最劣選擇 但是 它就是正解 floyd的原理 就是列舉中點 這裡 因為出題人 已經把詢問排好了序 只需要判斷中點 有沒有重建完成 把它加入圖中 include include inclu...
洛古1119 災後重建
題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...