您的位置:首页 > 其它

codeforces 24A Ring road DFS

2013-01-28 23:16 369 查看
题意:一个国家中的城市是像一个环一样的连起来的,由于马路改成单行道,连通性收到破坏。求最节省的修改方案,是每个城市直接都有通路。

做法:以城市1 为根节点,一次遍历左边,一次遍历右边,代价为sum(gra[i][j],tag[i][j]),gra记录改造费用,tag记录是这么走否需要改造。

#include <iostream>
#include <cstdio>
#include <cstring>
#define eps 1e8
#define LMT 102
using namespace std;
int n,ans,gra[LMT][LMT],tag[LMT][LMT];
void dfs(int u,int pre,int cost,int num)
{
    if(n<num)
    {
        cost+=tag[u][1]*gra[u][1];
        if(ans>cost)ans=cost;
        return ;
    }
    for(int j=1;j<=n;j++)
    if(gra[u][j]&&j!=pre)
    dfs(j,u,cost+tag[u][j]*gra[u][j],num+1);
}
int main()
{
    scanf("%d",&n);ans=eps;
    for(int i=1;i<=n;i++)
    {
        int u,v,c;
        scanf("%d%d%d",&u,&v,&c);
        gra[u][v]=gra[v][u]=c;
        tag[v][u]=1;
    }
    for(int j=1;j<=n;j++)
    if(gra[1][j])dfs(j,1,tag[1][j]*gra[1][j],2);
    printf("%d\n",ans);
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: