IDC94c6ytcTV+8r9ttTB0LHto6yx7cq+wcvSu8z1zai1wMGsvdO1xMG9uPa3v7zktcSx4LrFoaO3v7zktcSx4LrF1sHJ2c6qMaOsx9Kyu7Osuf0xMDAwMDCho8O/wb3X6cr9vt3Wrrzk09DSu7j2v9XQ0KGjIDxicj4K1fu49s7EvP7S1MG9uPYtMb3hzrKhozxicj4KCgogCjxicj4KCk91dHB1dAoKttTT2srkyOu1xMO/0rvX6cr9vt2jrMrks/a99rD8wKjSu9DQoaPI57n7uMPD1Lmst/u6z9Chz6O1xMu8wrejrMTHw7TK5LP2"Yes",否則輸出"No"。6 8 5 3 5 2 6 4 5 6 0 0 8 1 7 3 6 2 8 9 7 5 7 4 7 8 7 6 0 0 3 8 6 8 6 4 5 3 5 6 5 2 0 0 -1 -1
Yes Yes No
首先學習到了兩點:
判斷一張圖是否是一顆樹的兩個關鍵點:
#include#include using namespace std; #define M 100010 int pre[M]; int cnt[M]; int flag=0; int global_edges=0; int _find(int node){ if(node==pre[node])return node; else return pre[node]=_find(pre[node]); } int _union(int a,int b) { if(flag)return 1; int p=_find(a); int q=_find(b); if(p==q)return 1; else { pre[a]=b; global_edges++; return 0; } } int main(int argc, char *argv[]) { int Yflag=0; // freopen("1272.in","r",stdin); int a,b; for(int i=1;i