您的位置:首页 > 其它

ZOJ3712(set+map)写得好

2016-04-02 23:04 381 查看

这是浙江省赛的F题,题意是给你n个人,m对朋友关系,如果两个人的公共好友超过k人,那他们可以成为新的朋友,问经过一段“”足够长的时间后“, 新产生了多少对朋友关系这题,发现可以用STL秒, 枚举每对未成为朋友的i和j,如果其公共好友超过k人,那么增加这对关系,然后继续枚举。。。直到不能增加新关系为止

#include<iostream>  
#include<algorithm>  
#include<string>  
#include<cstdio>  
#include<cstring>  
#include<cstdlib>  
#include<cmath>  
#include<queue>  
#include<stack>  
#include<map>  
#include<set>  
using namespace std;  
  
map<int, set<int> > f;  
set<int> ::iterator iter;  
int n, m, k, u, v;  
  
int main()  
{  
    int t;  
    scanf("%d", &t);  
    while(t--)  
    {  
        f.clear();  
        scanf("%d%d%d", &n, &m, &k);  
        while(m--)  
        {  
            scanf("%d%d", &u, &v);  
            f[u].insert(v);  
            f[v].insert(u);  
        }  
        bool flag = 1;  
        int ans = 0;  
        while(flag)  
        {  
            flag = 0;  
            for(int i=0; i<n-1; i++)  
                for(int j=i+1; j<n; j++)  
                {  
                    if(f[i].count(j))   continue;  
                    int cnt = 0;  
                    for(iter = f[i].begin(); iter != f[i].end(); iter++)  
                    {  
                        int m = *iter;  
                        if(f[j].count(m))   cnt++;  
                    }  
                    if(cnt >= k)  
                    {  
                        ans++;  
                        f[i].insert(j);  
                        f[j].insert(i);  
                        flag = 1;  
                    }  
                }  
        }  
        printf("%d\n", ans);  
    }  
    return 0;  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: