HDU 5934 强连通分量

点击打开链接

题意:给了n个炸弹,然后让你引爆其中的炸弹,然后使得所有的炸弹都爆炸,一个炸弹爆炸会使得它半径内的炸弹爆炸,以此类推

思路:强连通缩点,然后找入度为0的所有的联通块,然后在联通块内找一个花费最小的即可

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3fll;
const int maxn=1010;
int V;
vectorG[maxn],rG[maxn],vs,ans[maxn];
bool used[maxn],vis[maxn][maxn],fvis[maxn];
int cmp[maxn],in[maxn];
void add_edge(int from,int to){
    G[from].push_back(to);
    rG[to].push_back(from);
}
void dfs(int v){
    used[v]=1;
    for(unsigned int i=0;i=0;i--){
        if(!used[vs[i]]) rdfs(vs[i],sum++);
    }
    return sum;
}
ll x[maxn],y[maxn],r[maxn],c[maxn];
void slove(){
    for(int i=0;i=(y[i]-y[j])*(y[i]-y[j])+(x[i]-x[j])*(x[i]-x[j])) add_edge(i,j),vis[i][j]=1;
        }
    }
}
int main(){
    int T,n,cas=1;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&V);
        for(int i=0;i

你可能感兴趣的:(图论,强联通分量)