hdu 4738

判连通求桥问题,输出最少派兵人数,不过有个坑就在于如果有桥上无人把手也应当需要派一个人去炸桥,则问题可以解决。

#include
#include
#include
#include


const int INF = 0x3f3f3f3f;
const int maxn = 1005;
using namespace std;

int edge[maxn][maxn];
vector  G[maxn];
int pre[maxn],iscut[maxn],vis[maxn],current_cc,dfs_clock,ans,n,m;


void dfs(int x){
    vis[x]=1;
    for(int i=0; ipre[u]&&edge[u][v]!=-2)//如果还满足桥 
                 ans = min(ans,edge[u][v]);
        }
        else if(pre[v]1)printf("0\n");
         else{
              memset(pre,0,sizeof(pre));
              dfs_clock = 0;
              ans = INF;
              dfs_bridge(1,-1);
              if(ans==0)printf("1\n");
              else if(ans==INF)printf("-1\n");
              else printf("%d\n",ans);
         } 
     }
     return 0;
}


你可能感兴趣的:(hdu,基础图论,图论)