无向图找最小环

无向图找最小环。

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define met(a,b) memset(a,b,sizeof a)
#define pb push_back
#define mp make_pair
#define rep(i,l,r) for(int i=(l);i<=(r);++i)
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N = 4e3+50;;
const int M = 255;
const int mod = 998244353;
const int mo=123;
const double pi= acos(-1.0);
typedef pair<int,int>pii;
typedef pair<ll,int>P;
int n,m,tot;
ll ans;
vector<pii>edg[N];
map<pii,int>p;
ll dis[N];
int vis[N],mark[N][N];
int u[N],v[N],cost[N];
ll dij(int s,int t,int add){
    priority_queue<P,vector<P>,greater<P> >q;
    for(int i=1;i<=tot;i++)vis[i]=0,dis[i]=10000000000;
    q.push(P(0LL,s));
    dis[s]=0;
    while(!q.empty()){
        int u=q.top().second;
        ll d=q.top().first;
        q.pop();
        vis[u]=1;
        if(d+add>=ans)break;
        for(auto e : edg[u]){
            int v=e.first;
            int w=e.second;
            if(mark[u][v])continue;
            if(dis[v]>dis[u]+w){
                dis[v]=dis[u]+w;
                if(!vis[v]){
                    q.push(P(dis[v],v));
                }
            }
        }
    }
    return dis[t];
}
int main(){
    int T,cas=0;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&m);
        tot=0;
        ans=10000000000;
        p.clear();met(mark,0);
        for(int i=1;i<N;i++)edg[i].clear();
        for(int i=0;i<m;i++){
            int x,y,xx,yy,w;
            scanf("%d%d%d%d%d",&x,&y,&xx,&yy,&w);
            if(!p.count(mp(x,y)))p[mp(x,y)]=++tot;
            if(!p.count(mp(xx,yy)))p[mp(xx,yy)]=++tot;
            edg[p[mp(x,y)]].pb(mp(p[mp(xx,yy)],w));
            edg[p[mp(xx,yy)]].pb(mp(p[mp(x,y)],w));
            u[i]=p[mp(x,y)];v[i]=p[mp(xx,yy)];cost[i]=w;
        }
        for(int i=0;i<m;i++){
            mark[u[i]][v[i]]=1;
            ans=min(ans,dij(u[i],v[i],cost[i])+cost[i]);
            mark[u[i]][v[i]]=0;
        }
        printf("Case #%d: %lld\n",++cas,ans==10000000000?0:ans);
    }
    return 0;
}

 

posted @ 2017-10-19 15:07  贱人方  阅读(624)  评论(0编辑  收藏  举报