hdu5137 枚举删点

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn = 32;
const int INF = 99999999;
int map[maxn][maxn],n,m,dis[maxn][maxn];
int max(int x,int y)
{
    return x>y?x:y;
}
int floyd()
{
    int i,j,k;
    for(k=1;k<=n;k++)
    {
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(dis[i][j]>dis[i][k]+dis[k][j])
                    dis[i][j]=dis[i][k]+dis[k][j];
            }
        }
    }
    return dis[1][n];
}
int del(int u)
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            if(i==j)dis[i][j]=INF;
            if(i==u||j==u)
                dis[i][j]=INF;
            else if(map[i][j]==0)
                dis[i][j]=INF;
            else  dis[i][j]=map[i][j];

        }
    }
    return floyd();
}
int main()
{
    int i,j;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(!n&&!m)break;
        memset(map,0,sizeof(map));
        for(i=0;i<m;i++)
        {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            if(map[x][y]==0||map[x][y]>z)
                map[x][y]=map[y][x]=z;
        }
        int flag=del(0);
        if(flag>=INF)
        {
            printf("Inf\n");
            continue;
        }
        //printf("%d\n",flag);
        int ans=0;
        for(i=2;i<n;i++)
        {
            int temp=del(i);
            ans=max(ans,temp);
        }
        if(ans>=INF)
            printf("Inf\n");
        else
            printf("%d\n",ans);
    }
}
时间: 2024-11-10 06:43:55

hdu5137 枚举删点的相关文章

hdoj 5137 How Many Maos Does the Guanxi Worth 【枚举删点 + 最短路】

How Many Maos Does the Guanxi Worth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) Total Submission(s): 847    Accepted Submission(s): 322 Problem Description "Guanxi" is a very important word in Chinese. I

拓扑排序,树的直径模板(CF14D 枚举删边)

HDU4607 树的直径 #include <stdio.h> #include <string.h> #include <iostream> #include <queue> #include <vector> using namespace std; #define N 100005 #define INF 1<<30 int n,dis[N],E; bool vis[N]; vector<int>G[N]; //注意

HDU 1281——棋盘游戏——————【最大匹配、枚举删点、邻接表方式】

棋盘游戏 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1281 Description 小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决了这个问题(见下图)注意不能放车的地方不影响车的

BZOJ 2467 解题报告

对于一个合格的程序员来说,掌握一定的数学知识是非常必要的,所以这次就开个数学专题玩玩. 不多说啥,上题目,我们直接分析题目! 首先ORZ stonepage神犇,一眼就看出我把快速幂写成快速乘了…… 话说%2007为啥不是2007年的题?还TMD是市选,MDZZ: 算了不管他,我们说我们的: 由于题目要求一个生成树,那么我们就要保证所有的点在一个联通块里面,so,怎么做呢? 首先观察这一个图,我们很容易能发现,其实我们只需要删去n+1条边,那么怎么删呢? 首先外围的五边形只能每个最少删去一条边这

CF #330 D2 E

相当于给你一些点,要你最多删除不超过k,使得能使用一个边长为整数的长方形,与XY轴平行,使长方形的面积最小. 上课时拿笔来画画,然后忽然思路就开了,要是比赛也这样就好了~~先按X,Y分别排序,由于K较小,而且,删除的时候肯定会删除最外围的点,所以,可以上下左右枚举删了哪些点,排序后的数组来模拟这个过程,最多4^K个选择,可以过. #include <iostream> #include <cstdio> #include <cstring> #include <a

UVALive 4080 Warfare And Logistics

本题最关键的地方在于,对于一个单源的最短路径来说,如果最短路树上的边没有改变的话,那么最短路肯定是不会变的, 所以只要枚举删掉最短路树上的边.这样的时间复杂度就能过了. 瞎搞真删边,结果T了... #include<bits/stdc++.h> using namespace std; const int maxn = 102, maxm = 2002; int head[maxn], to[maxm], nxt[maxm],wei[maxm],ecnt; int delta[maxm]; v

BZOJ3575 HNOI2014 道路阻塞

3575: [Hnoi2014]道路堵塞 Time Limit: 10 Sec  Memory Limit: 128 MB Description A国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国交通部指定了一条从城市1到城市N的路径,并且保证这条路径的长度是所有从城市1到城市N的路径中最短的.不幸的是,因为从城市1到城市N旅行的人越来越多,这条由交通部指定的路径经常发生堵塞.现在A国想知道,这条路径中的任意一条道路无法通行时,由城市1到

计蒜客 腾讯消消乐

题意 腾讯推出了一款益智类游戏――消消乐.游戏一开始,给定一个长度为n的序列,其中第i个数为A[i], 游戏的目标是把这些数全都删去,每次删除的操作为:选取一段连续的区间,不妨记为[L,R], 如果这一段区间内所有数的最大公约数 >= k(k的值在游戏的一开始会给定),那么这一段区间就能被直接删去. 注意:一次删除以后,剩下的数会合并成为一个连续区间. 定义f(i)为进行i次操作将整个序列删完的方案数. 你需要实现一个程序,计算  数据 1 <= n <= 18, 1 <= A[i

BZOJ 1040 【ZJOI2008】 骑士

Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中安逸了数百年的Z国又怎能抵挡的住Y国的军队.于是人们把所有的希望都寄托在了骑士团的身上,就像期待有一个真龙天子的降生,带领正义打败邪恶.骑士团是肯定具有打败邪恶势力的能力的,但是骑士们互相之间往往有一些矛盾.每个骑士都有且仅有一个自己最厌恶的骑士(当然不是他自己),他是绝对不