起初做這題想的是用強聯通圖去做,但似乎怎麼去想都沒有辦法把圖和強聯通扯上關係,因為圖中的所有邊都是雙向的,所以所有點都是一定存在於乙個強聯通圖中。後來才發現這個應該是雙聯通問題(dcc),在乙個雙聯通圖中去掉任意一條邊都不改變其聯通性,所以我們就與強聯通問題相似,把所有雙聯通分量縮點建立dag圖,再dfs搜尋求解。
#include #include #include #include #include using namespace std;
#define n 10005
#define m 20005
struct node
edge[2*m],edge1[2*m];
int head[n],tol,n,m,cnt,dfn[n],low[n],visit[n],belong[n],tol1,head1[n],val[n],val1[n],sum,min,count;
stacks;
void add(int a,int b)
void add1(int a,int b)
void tarjan(int u,int father)//tarjan找雙聯通分量進行縮點
//考慮重邊
if(!visit[v]) tarjan(v,u);
low[u]=min(low[u],low[v]);
}if(dfn[u]==low[u])
while(v!=u);
}}int dfs(int u,int father)
min=min(min,abs(sum-2*sum));
return sum;
}int main()
{ int i,a,b;
while(scanf("%d%d",&n,&m)!=eof)
{memset(head,-1,sizeof(head));
tol=cnt=0;
sum=0;
for(i=0; i
HDU 2242(考研路茫茫 空調教室)
題意 有乙個教室群,教室之間有空調管相連 原圖連通 每個教室都有人,求斷開一條空調管使之分開成兩個教室群,並且使兩個教師群的人數差值最小。思路 這題沒什麼難度吧。思路都很明了 可能是看過標籤的緣故吧0.0 求邊雙連通分量,縮點,然後進行樹形dp計數求出答案即可,貼個 以後拿來當模板用吧。includ...
hdu 2242 考研路茫茫 空調教室
題意 給乙個雙聯通圖 有重邊 每乙個節點有權值,現在要求把以一條邊去掉,使得這個圖分為兩個部分,而且要使得這兩個部分的權的差的絕對值最小 思路 1,邊 雙連通求縮點,得到一顆樹 2,簡單樹形dp 這題難倒我好久,首先是各種hash使得mle,然後就是陣列開小了,沒有注意m的值有2w 最重大錯誤就在於...
HDU 2242 考研路茫茫 空調教室
眾所周知,hdu的考研教室是沒有空調的,於是就苦了不少不去圖書館的考研仔們。lele也是其中乙個。而某教室旁邊又擺著兩個未裝上的空調,更是引起人們無限yy。乙個炎熱的下午,lele照例在教室睡覺的時候,竟然做起了空調教室的美夢。lele夢到學校某天終於大發慈悲給某個教室安上了乙個空調。而且建造了了m...