題目描述:「每個人都擁有乙個夢,即使彼此不相同,能夠與你分享,無論失敗成功都會感動。愛因為在心中,平凡而不平庸,世界就像迷宮,卻又讓我們此刻相逢our home。」
在愛的國度裡有n個人,在他們的心中都有著乙個愛的名單,上面記載著他所愛的人(不會出現自愛的情況)。愛是具有傳遞性的,即如果a愛b,b愛c,則a也愛c。
如果有這樣一部分人,他們彼此都相愛,則他們就超越了一切的限制,用集體的愛化身成為乙個愛心天使。
現在,我們想知道在這個愛的國度裡會出現多少愛心天使。而且,如果某個愛心天使被其他所有人或愛心天使所愛則請輸出這個愛心天使是由哪些人構成的,否則輸出-1。
輸入描述:
第1行,兩個數n、m,代表愛的國度裡有n個人,愛的關係有m條。
第2到第m+1行,每行兩個數a、b,代表a愛b。
輸出描述:
第1行,兩個數n、m,代表愛的國度裡有n個人,愛的關係有m條。
第2到第m+1行,每行兩個數a、b,代表a愛b。
輸出描述:
第1行,乙個數,代表愛的國度裡有多少愛心天使。
第2行,如果某個愛心天使被其他所有人和愛心天使所愛則請輸出這個愛心天使是由哪些人構成的(從小到大排序),否則輸出-1。
樣例輸入:
樣例輸入1:
6 7
1 2
2 3
3 2
4 2
4 5
5 6
6 4
樣例輸入2:
3 3
1 2
2 1
2 3
樣例輸出:
樣例輸出1:
2 2 3
樣例輸出2:
1 -1
演算法使用:
tarjan演算法
基本思路:
tarjan演算法+統計出度
#include
#include
#include
using
namespace
std;
const
int maxn=10001;
struct data
e[maxn];
struct node
g[maxn];
int dfn[maxn],low[maxn],stack[maxn],n,m,tot,top,cut,ans,b[maxn],head[maxn],out[maxn];
bool in[maxn],s[maxn];
void add_edge(int u,int v)
void tarjan(int u)
else
if(in[v])
low[u]=min(low[u],dfn[v]);
}if(dfn[u]==low[u])
while(u!=v);
sort(a+1,a+l+1);
g[tot].l=l;
for(int i=1;i<=l;i++)
g[tot].x[i]=a[i];
if(g[tot].l==1) ans--,s[tot]=0;
else s[tot]=1;
}}int main()
tot=0;
for(int i=1;i<=n;i++)
if(!dfn[i])
tarjan(i);
for(int i=1;i<=n;i++)
for(int j=head[i];j!=-1;j=e[j].next)
if(b[i]!=b[e[j].v])
out[b[i]]++;
cout
for(int i=1;i<=tot;i++)
if(!out[i])
else xx=i;
}if(xx==-1) cout
<<-1;
else
for(int i=1;i<=g[xx].l;i++)
cout
<" ";
return
0;}
Codevs 2822 愛在心中
2822 愛在心中 時間限制 1 s 空間限制 128000 kb 傳送門題目等級 鑽石 diamond 題目描述 description 每個人都擁有乙個夢,即使彼此不相同,能夠與你分享,無論失敗成功都會感動。愛因為在心中,平凡而不平庸,世界就像迷宮,卻又讓我們此刻相逢our home。在愛的國度...
codevs2822 愛在心中
題目描述 description 每個人都擁有乙個夢,即使彼此不相同,能夠與你分享,無論失敗成功都會感動。愛因為在心中,平凡而不平庸,世界就像迷宮,卻又讓我們此刻相逢our home。在愛的國度裡有n個人,在他們的心中都有著乙個愛的名單,上面記載著他所愛的人 不會出現自愛的情況 愛是具有傳遞性的,即...
codevs 2822 愛在心中
時間限制 1 s 空間限制 128000 kb 題目等級 鑽石 diamond 題目描述 description 每個人都擁有乙個夢,即使彼此不相同,能夠與你分享,無論失敗成功都會感動。愛因為在心中,平凡而不平庸,世界就像迷宮,卻又讓我們此刻相逢our home。在愛的國度裡有n個人,在他們的心中都...