程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU3622(二分+2-SAT)

HDU3622(二分+2-SAT)

編輯:C++入門知識

題意不說了,直接講思路。

首先對半徑進行二分,然後再判斷炸彈之間的距離是否小於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;ieps)
		{
			double mid=(l+r)/2;
			for(int i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved