這道題在poj2762有,這個出題人直接翻譯弄過來了。。。
弱連通的定義是:從u能到達v或從v能到達u,則u和v這兩個點弱連通。
顯然如果是強連通分量就一定是弱連通分量啦,所以可以直接縮點弄掉。
縮點後的dag中,可能會不符合條件的不可能被我們縮掉。
那麼對於這個dag,發現只有兩個或多個邊連入某個點的話,就不符合這個條件。
所以對乙個新圖弄乙個toposort,一旦通過同乙個點刪邊的過程新增了兩個以上的點的話,就絕對不符合條件。
**:
#include#include#include#include#includeconst int maxn = 10005, maxm = 100005;
struct edges
e[maxm], e2[maxm];
int head[maxn], tot;
int head2[maxn], tot2;
int n, m;
int dfn[maxn], low[maxn], dtot;
bool vis[maxn];
int color[maxn], ctot;
int indegree[maxn];
std::stacks;
int read()
while(ch >= '0' && ch <= '9')
return s * ans;
}void init()
void link(int u, int v)
; head[u] = tot;
}void link2(int u, int v)
; head2[u] = tot2;
}void tarjan(int u)
else if(vis[v]) low[u] = std::min(low[u], dfn[v]);
}if(low[u] == dfn[u])
int x = s.top(); s.pop();
vis[x] = false; color[x] = ctot;
}}bool toposort()
}if(cnt > 1) return false;
while(!q.empty())
}if(cnt > 1) return false;
}if(count == ctot) return true;
}int main()
for(int i = 1; i <= n; i++)
//for(int i = 1; i <= n; i++) printf("%d\n", color[i]);
for(int i = 1; i <= tot; i++)
}if(toposort()) printf("yes\n");
else printf("no\n");
}return 0;
}
7 24校內交流賽 T1 T2
乙個腦洞很大的題,將輸入的所有數異或起來輸出就好了 話說我為什麼這麼喜歡用異或啊 結論題 當某個字串長度恰巧為3 k 1時,從它往下的第3 k 1行恰好只決定於這個字串的左右兩個端點的值 includeusing namespace std inline intread intn,l char a ...
考試T1護花
傳送門 這題的提議似乎有什麼問題,只要約翰選好了要抓那頭牛,他就不會吃草了,站在原地傻等?這題就是貪心,但在用cmp中比較單位時間吃草數量時,要用double型,不然可能會有點一樣。還有就是主要的思路 設x,y是兩頭牛,如果後送y牛損失的花少於後送x牛損失的花 即x.t x.d x.t y.t y....
分塊隨筆T1
時間限制 1 sec 記憶體限制 128 mb 提交 解決 提交 討論版 大家都知道小z的課總是十分快的 鬼知道為什麼 然後我們阿m同學總是在上課時處於神遊狀態亦或是休眠狀態,所以她對小z到底講了什麼是一無所知。然而,小z總是很壞地打斷阿m的休眠狀態,並問她問題。作為阿m的開黑好夥伴,你當然不希望阿...