真是有故事的一題呢
半年前在寧夏做過一道類似的題,當時因為我的愚昧痛失了金牌。
要是現在去肯定穩穩的過,真是生不逢時。
簡單的來說就是按照時間順序一邊建邊一邊查詢,對於每次建邊只要用floyd加中轉點即可。
#include #include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
inline
int read()
#define for(i, x, y) for(int i=x;i<=y;i++)
#define _for(i, x, y) for(int i=x;i>=y;i--)
#define mem(f, x) memset(f,x,sizeof(f))
#define sca(x) scanf("%d", &x)
#define sca2(x,y) scanf("%d%d",&x,&y)
#define sca3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define scl(x) scanf("%lld",&x);
#define pri(x) printf("%d\n", x)
#define prl(x) printf("%lld\n",x);
#define clr(u) for(int i=0;i<=n;i++)u[i].clear();
#define ll long long
#define ull unsigned long long
#define mp make_pair
#define pii pair#define pil pair#define pll pair#define pb push_back
#define fi first
#define se second typedef vector
vi;const
double eps = 1e-9
;const
int maxn = 210
;const
int inf = 0x3f3f3f3f
;const
int mod = 1e9 + 7
; const
int maxm = 5e4 + 10
;int
n,m,q;
pair
p[maxn];
intdp[maxn][maxn];
struct
queryquery[maxm];
bool
vis[maxn];
bool
cmp(query a,query b)
void add(int
x) }
}int
main()
mem(dp,
0x3f
);
for(int i = 0; i <= n - 1; i ++) dp[i][i] = 0
;
for(int i = 1; i <= m ; i ++)
sort(p ,p +n);
sca(q);
int now = 0,cnt = 0
;
while(cnt < n && p[cnt].first == 0
)
for(int i = 1; i <= q; i ++)
if(!vis[query[i].x] || !vis[query[i].y] || dp[query[i].x][query[i].y] == inf) pri(-1
);
else
pri(dp[query[i].x][query[i].y]);
}return0;
}
洛谷 P1119 災後重建
題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...
洛谷 P1119 災後重建
題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...
洛谷 P1119 災後重建
題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...