HDU3622(二分+2-SAT)

2014-11-24 12:22:39 · 作者: · 浏览: 1

题意不说了,直接讲思路。

首先对半径进行二分,然后再判断炸弹之间的距离是否小于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