麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

SPOJ - UOFTCG(樹(shù)的路徑覆蓋,好題)

2019-11-11 05:44:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

題目鏈接

UOFTCG - Office Mates

no tags 

Dr. Baws has an interesting PRoblem. His N graduate students, while friendly with some select people, are generally not friendly with each other. No graduate student is willing to sit beside a person they aren't friends with.

The desks are up against the wall, in a single line, so it's possible that Dr. Baws will have to leave some desks empty. He does know which students are friends, and fortunately the list is not so long: it turns out that for any subset of Kgraduate students, there are at most K?1 pairs of friends. Dr. Baws would like you to minimize the total number of desks required. What is this minimum number?

Input

The input begins with an integer T≤50, the number of test cases. Each test case begins with two integers on their own line: N≤100000, the number of graduate students (who are indexed by the integers 1 through N), and M, the number of friendships among the students. Following this are M lines, each containing two integers i and j separated by a single space. Two integers i and j represent a mutual friendship between students i and j.

The total size of the input file does not exceed 2 MB.

Output

For each test case output a single number: the minimum number of desks Dr. Baws requires to seat the students.

Example

Input:
16 51 21 31 44 54 6
Output:
7
Explanation of Sample:

As seen in the diagram, you seat the students in two groups of three with one empty desk in the middle.

 Submit solution!
題意:

有N(N <= 100000)個(gè)學(xué)生,M對(duì)朋友關(guān)系,學(xué)生只能挨著他的朋友坐。

桌子排列成一條直線,可以讓一些桌子空出來(lái).

數(shù)據(jù)保證對(duì)于任何含K(K<=N)個(gè)學(xué)生的集合,最多只有K-1對(duì)朋友。

求最少需要多少?gòu)堊雷印?/p>

題解

這道題可以轉(zhuǎn)化為圖的最小路徑覆蓋。假設(shè)點(diǎn)數(shù)為n,最小路徑覆蓋條數(shù)為m,答案即為n+m-1。根據(jù)題意,發(fā)現(xiàn)數(shù)據(jù)是若干顆樹(shù)。

那么,對(duì)于一棵樹(shù),怎么求最小路徑覆蓋呢?

有兩種方法,貪心和樹(shù)形dp,可參考博客:博客鏈接

樹(shù)形dp解至今還沒(méi)看懂==

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<vector>#include<queue>#include<stack>using namespace std;#define rep(i,a,n) for (int i=a;i<n;i++)#define per(i,a,n) for (int i=n-1;i>=a;i--)#define pb push_back#define fi first#define se secondtypedef vector<int> VI;typedef long long ll;typedef pair<int,int> PII;const int inf=0x3fffffff;const ll mod=1000000007;const int maxn=100000+100;int head[maxn];struct edge{    int from,to,next;}e[maxn*2];   //int tol=0;void add(int u,int v){    e[++tol].to=v,e[tol].next=head[u],head[u]=tol;}int vis[maxn],sum[maxn],used[maxn];void dfs(int u,int fa){    vis[u]=1;    sum[u]=1;    int deg=0;    for(int i=head[u];i;i=e[i].next)    {        int v=e[i].to;        if(v==fa) continue;        dfs(v,u);        sum[u]+=sum[v];        if(!used[v]) deg++;    }    if(deg>=2) used[u]=1,sum[u]-=2;    else if(deg==1) sum[u]-=1;}int main(){    int cas;    scanf("%d",&cas);    while(cas--)    {        memset(vis,0,sizeof(vis));        memset(sum,0,sizeof(sum));        memset(head,0,sizeof(head));        memset(used,0,sizeof(used));        tol=0;        int n,m;        scanf("%d%d",&n,&m);        while(m--)        {            int u,v;            scanf("%d%d",&u,&v);            add(u,v),add(v,u);        }        int ans=0;        rep(i,1,n+1)        {            if(!vis[i]) dfs(i,0),ans+=sum[i];        }        ans=n+ans-1;        printf("%d/n",ans);    }    return 0;}


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 在线观看免费污视频 | 成人免费一区二区三区视频网站 | a网站在线| omofun 动漫在线观看 | 色骚综合 | 国产自在线 | 国产精品久久二区 | 福利一区二区三区视频在线观看 | 毛片av网| 欧美日韩高清不卡 | 羞羞草视频 | 最新福利在线 | 毛片视频大全 | 国产美女自拍av | 成人一级视频在线观看 | 欧美久久一区 | 久久久精品网 | 福利一区二区三区视频在线观看 | 久久国产亚洲精品 | 欧美成人免费在线视频 | 97中文| 主人在调教室性调教女仆游戏 | www.成人在线视频 | 国产午夜亚洲精品理论片大丰影院 | 羞羞视频免费网站男男 | 人人舔人人舔 | 国产精品一区网站 | 巨乳毛片| 精品人成| 成人午夜天堂 | 亚洲日色 | 成人福利在线免费观看 | 国产又粗又爽又深的免费视频 | 久久成人黄色 | 国产亚洲综合一区二区 | 九一国产精品 | 91av原创 | 久久精品国产99久久6动漫亮点 | 欧美性生交xxxxx久久久 | 久久免费视频一区 | 91成人久久 |