首页 > ACM题库 > HDU-杭电 > hdu 2270 How Many Friends Will Be Together With You待解决[解题报告]C++
2014
01-04

hdu 2270 How Many Friends Will Be Together With You待解决[解题报告]C++

How Many Friends Will Be Together With You

问题描述 :

One day dandelion and her friends decides to play outside. As there are so many people , they decide to divide into several parts . Dandelion wants to know how many friends will be together with her. The way they use to divide is : everyone can choose one people to join in her group, Such as if A chooses B to join in her group , then B will leave the group she is in now , and joins in the group that A is in . One can also choose some people who has already in her group. All of dandelion� friends are expressed as an integer 2,3… n and dandelion is expressed as 1.The choosing work begins from dandelion then the friend who are signed as 2 ?until the friend who are signed as n .

输入:

Each case begins with an integer n, (0<n<=1000000) stands for the number of people.
Then follows n lines , the i+1 line contains an integer p, stands for people who are signed as i chooses the one who are signed as p to join in her group.

输出:

Each case begins with an integer n, (0<n<=1000000) stands for the number of people.
Then follows n lines , the i+1 line contains an integer p, stands for people who are signed as i chooses the one who are signed as p to join in her group.

样例输入:

3
3
3
1
3
2
1
2

样例输出:

2
0

Hint
Hint For the second case , the group is (1)(2)(3) at first , then (1,2)(3) after dandelion� picking , then ( 1 , 2 ) ( 3) , then (1) (2 ,3). So at last , no other people is together with dandelion.


  1. for(int i=1; i<=m; i++){
    for(int j=1; j<=n; j++){
    dp = dp [j-1] + 1;
    if(s1.charAt(i-1) == s3.charAt(i+j-1))
    dp = dp[i-1] + 1;
    if(s2.charAt(j-1) == s3.charAt(i+j-1))
    dp = Math.max(dp [j - 1] + 1, dp );
    }
    }
    这里的代码似乎有点问题? dp(i)(j) = dp(i)(j-1) + 1;这个例子System.out.println(ils.isInterleave("aa","dbbca", "aadbbcb"));返回的应该是false