題意:
略思路:
用拓撲找環的方法,o(n) 把度數為1(跟其相連的點小於2)的點去掉,並標記,那樣剩下一些環,然後dfs找每個環的權值和 和 環中結點的個數;將點個數為偶數的環去掉
其實這樣做的話可以直接計算 有奇數個點的環的權值;
#include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
const int maxn = 1e4 + 7;
int n, m;
ll v[maxn];
vectorvec[maxn];
ll sum = 0;
int d[maxn];
bool vis[maxn];
void init()
for(int i = 0; i < m; ++i)
}ll dfs1(int id)
} return res;
}ll tmp, cnt;
void dfs2(int id)
}}void solve()
} for(int i = 1; i <= n; ++i)
printf("%lld\n", sum);
}int main()
return 0;
}
hdu 5438 Ponds(拓撲應用 DFS)
題目大意 p個池塘 m個連同渠 p個池塘的價值 m個連通渠的u與v 小於兩個連同渠的池塘去掉。找到剩餘的連通的池塘,並且只加連通的池塘的總個數為奇數個的連通塊的價值。詳見 寫的很繁瑣很差勁,哎,但還是分享下吧。include include include include includeusing ...
hdu5438(拓撲排序 dfs)
題意 p個頂點m條邊的無向圖,每個頂點有乙個權值,現在要刪除所有的葉子節點,重複此操作直至形成的 森林 中不存在葉子節點,然後找出森林中頂點個數為奇數的樹的權值的和。思路 模擬拓撲排序,每個點每連一條邊,我讓它的度數就加2,所有度數為2的點入隊,然後把這些點所連的邊刪掉,即跟它相關聯的點的度數減去2...
hdu5438 拓撲排序 dfs
題意就是現在有一片池塘,池塘之間符合無向圖的關係,每個池塘都有乙個權值。現在要刪去那些入度小於二的點,然後計算在剩下的池塘中,連線的池塘數為奇數的池塘總和。嗯,當初讀題半天沒讀懂,把樣例的資料畫一下就很清晰了。思路就是 先用拓撲排序篩選那些入度小於2的池塘,然後dfs搜尋看看每乙個連線的池塘數是不是...