1 条题解
-
0
题解:
本题可以建立一个有向图,如果 ,就视作有一条边。然后跑一遍floyd算法。只要距离不是无穷大,也就是A能到达B,那么 ,同时有 的话就是等价的。因此只要花费 的时间预处理就可以回答所有询问。
#include <bits/stdc++.h> #define maxn 205 using namespace std; bool e[maxn][maxn];//邻接表建图 int main () { int n,m,q; cin>>n>>m>>q; //输入 for (int i=0;i<m;i++) { int a,b; cin>>a>>b; a--; b--; e[a][b]=1; } //自己能推出自己 for (int i=0;i<n;i++) { e[i][i]=1; } //floyd for (int i=0;i<n;i++) { for (int j=0;j<n;j++) { for (int k=0;k<n;k++) { if (e[j][i]&&e[i][k]) { e[j][k]=1; } } } } //询问 for (int i=0;i<q;i++) { int a,b; cin>>a>>b; a--; b--; if (e[a][b]&&e[b][a]) { cout<<1; } else { cout<<0; } cout<<endl; } return 0; }
- 1
信息
- ID
- 221
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 48
- 已通过
- 14
- 上传者