1160-繁杂的道路

描述

A城是由许多小城镇组成的,在A城的各个小城镇间建了许多道路(道路是双向的)。这些道路是A城便利交通的基础。游客通过这些道路可以在任意两个城镇之间往返。最近市长对这座城市错综复杂的交通感到厌烦,决定重新规划A城的道路。所以他派给你一个任务:留下尽可能少的道路,保证任意两个城镇之间还是可达的。将其他多余的道路全部拆除。

输入

第一行为两个正整数n1<=n<=100)和mn表示A城中小城镇的数量。M表示现有道路的数量。接下来是m行,每行用两个数v1v2表示一条从城镇v1到城镇v2的道路。( v1!=v2),两个城镇之间至多有一条道路。

输出

输出最多能够拆除的道路数量。

样例输入

5 7

4 6

1 2

1 3

1 4

2 3

2 4

3 4

样例输出

3

#include<iostream>

using namespace std;

#define MAXT 1001

#define MAXK 31

inline int max(int a,int b)

{

    return a>b?a:b;

}

int main()

{

    int t,k,i,j;

    cin>>t>>k;

    int a[MAXT];

    int p[MAXT][MAXK];

    for(i=1;i<=t;i++)

        cin>>a[i];

    p[0][0]=0;

    for(i=1;i<=t;i++)

    {

        p[i][0]=p[i-1][0]+a[i]%2;

        for(j=1;j<=k;j++)

        {

            p[i][j]=max(p[i-1][j-1],p[i-1][j])+(j%2==(a[i]-1)?1:0);    

        }

    }

    int max=0;

    for(j=1;j<=k;j++)

        if(p[t][j]>max) max=p[t][j];

    cout<<max<<endl;

    return 0;

} 

  

你可能感兴趣的:(1160-繁杂的道路)