POJ2149

来源:互联网 发布:org.apache.spark jar 编辑:程序博客网 时间:2024/06/14 18:48

易水人去,明月如霜。

Description

If a tree falls in the forest, and there's nobody there to hear, does it make a sound? This classic conundrum was coined by George Berkeley (1685-1753), the Bishop and influential Irish philosopher whose primary philosophical achievement is the advancement of what has come to be called subjective idealism. He wrote a number of works, of which the most widely-read are Treatise Concerning the Principles of Human Knowledge (1710) and Three Dialogues between Hylas and Philonous (1713) (Philonous, the "lover of the mind," representing Berkeley himself).

Input

A forest contains T trees numbered from 1 to T and P people numbered from 1 to P. Standard input consists of a line containing P and T followed by several lines, containing a pair of integers i and j, indicating that person i has heard tree j fall.

Output

People may have different opinions as to which trees, according to Berkeley, have made a sound. Output how many different opinions are represented in the input? Two people hold the same opinion only if they hear exactly the same set of trees. You may assume that P < 100 and T < 100.

Sample Input

3 41 23 31 32 23 22 4

Sample Output

2
哈希,求集合的大小

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;struct tree {       int dep,s;}a[2000],b[2000];bool cmp(tree a,tree b) {     return (a.s<b.s || (a.s==b.s && a.dep<b.dep));}int main() {    string s;    int n,cnt,i,top,t,d[2000];    cin >> n;    while (n--) {          cin >> s;          cnt=1;          memset(d,0,sizeof(d));          top=1;          d[top]=1;          a[cnt].dep=1;          a[cnt].s=1;          for (i=0;i<s.length();i++)              if (s[i]=='0') {                             a[++cnt].dep=a[d[top]].dep+1;                             a[cnt].s=1;                             d[++top]=cnt;              }              else {                   t=a[d[top]].s;                   a[d[--top]].s+=t;              }          cin >> s;          cnt=1;          memset(d,0,sizeof(d));          top=1;          d[top]=1;          b[cnt].dep=1;          b[cnt].s=1;          for (i=0;i<s.length();i++)              if (s[i]=='0') {                             b[++cnt].dep=b[d[top]].dep+1;                             b[cnt].s=1;                             d[++top]=cnt;              }              else {                   t=b[d[top]].s;                   b[d[--top]].s+=t;              }          sort(a+1,a+cnt+1,cmp);          sort(b+1,b+cnt+1,cmp);          bool flag=true;          for (i=1;i<=cnt;i++)              if (a[i].s!=b[i].s || a[i].dep!=b[i].dep) flag=false;          if (flag) printf("same/n");          else printf("different/n");    }    //system("pause");    return 0;}


0 0
原创粉丝点击