在愛的國度裡有n個人,在他們的心中都有著乙個愛的名單,上面記載著他所愛的人(不會出現自愛的情況)。愛是具有傳遞性的,即如果a愛b,b愛c,則a也愛c。
如果有這樣一部分人,他們彼此都相愛,則他們就超越了一切的限制,用集體的愛化身成為乙個愛心天使。
現在,我們想知道在這個愛的國度裡會出現多少愛心天使。而且,如果某個愛心天使被其他所有人或愛心天使所愛則請輸出這個愛心天使是由哪些人構成的,否則輸出-1。
第1行,兩個數n、m,代表愛的國度裡有n個人,愛的關係有m條。
第2到第m+1行,每行兩個數a、b,代表a愛b。
第1行,乙個數,代表愛的國度裡有多少愛心天使。
第2行,如果某個愛心天使被其他所有人和愛心天使所愛則請輸出這個愛心天使是由哪些人構成的(從小到大排序),否則輸出-1。
樣例輸入1:
6 71 2
2 33 2
4 24 5
5 66 4
樣例輸入2:
3 31 2
2 12 3
樣例輸出1:
22 3
樣例輸出2:1-1
各個測試點1s
第一問求強連通分量個數
第二問求出度為0大小不為1的強連通分量
注意:如果有兩個這樣的強連通分量,顯然無解
寫的時候出現了兩個錯誤,乙個是tarjan忘退棧了,邊表還寫錯了。。。
#include#include#define n 1000000
using
namespace
std;
struct
edge_node
e[n],d[n];
//int chudu[100];
inthead[n],h[n];
bool
instack [n];
intstack [n];
intdfn[n], low[n];
intsize[n],belong[n];
intcnt,index,top,scc;
intn,m,u,v;
void tarjan(int
u)
if (!dfn[v])
}if (low[u] ==dfn[u])
}}int
main()
for (int i=1;i<=n;i++)
if (!dfn[i])
tarjan(i);
int ans1 = 0
;
for (int i=1;i<=scc;i++)
if (size[i]!=1) ans1++;
printf(
"%d\n
",ans1);
cnt = 0
;
for (int i=1;i<=n;i++)}}
//printf("size:");
//for (int i=1;i<=scc;i++) printf("%d ",size[i]);printf("\n");
//printf("chudu:");
//for (int i=1;i<=scc;i++) printf("%d ",chudu[i]);
int pd =0
;
for (int i=1;i<=scc;i++)
pd =i;}}
if(pd)
else printf("-1"
);}
codevs 2822 愛在心中
題目描述 每個人都擁有乙個夢,即使彼此不相同,能夠與你分享,無論失敗成功都會感動。愛因為在心中,平凡而不平庸,世界就像迷宮,卻又讓我們此刻相逢our home。在愛的國度裡有n個人,在他們的心中都有著乙個愛的名單,上面記載著他所愛的人 不會出現自愛的情況 愛是具有傳遞性的,即如果a愛b,b愛c,則a...
Codevs 2822 愛在心中
2822 愛在心中 時間限制 1 s 空間限制 128000 kb 傳送門題目等級 鑽石 diamond 題目描述 description 每個人都擁有乙個夢,即使彼此不相同,能夠與你分享,無論失敗成功都會感動。愛因為在心中,平凡而不平庸,世界就像迷宮,卻又讓我們此刻相逢our home。在愛的國度...
codevs2822 愛在心中
題目描述 description 每個人都擁有乙個夢,即使彼此不相同,能夠與你分享,無論失敗成功都會感動。愛因為在心中,平凡而不平庸,世界就像迷宮,卻又讓我們此刻相逢our home。在愛的國度裡有n個人,在他們的心中都有著乙個愛的名單,上面記載著他所愛的人 不會出現自愛的情況 愛是具有傳遞性的,即...