题意不说了,直接讲思路。
首先对半径进行二分,然后再判断炸弹之间的距离是否小于2*半径,如果是,那么就连接i->j^1和j->i^1,然后用强连通判断可行性。
#include #include #include #include #include #include #include #include #include #include #include #define M 205 #define LL long long #define Ld __int64 #define eps 0.00001 #define INF 999999999 #define MOD 112233 #define MAX 26 using namespace std; struct Node { double x,y; }; struct Node node[M]; vector G[M]; //dfn数组表示dfs时到达i点的时间,indx表示时间 int dfn[M],low[M],sccno[M],scc_cnt; int indx; int num[M]; stack s; void Tarjan(int u) { indx++; dfn[u]=low[u]=indx; //为结点u设定次序编号和low初值 s.push(u); //将结点u压入栈中 for(int i=0;i eps) { double mid=(l+r)/2; for(int i=0;i