编程之美 八卦的小冰

小数据AC,大数据TLE。。。

题目3 : 八卦的小冰

时间限制:
2000ms 单点时限:
1000ms 内存限制:
256MB

描述

小冰是个八卦的人,最近她对一个社交网站很感兴趣。

由于小冰是个机器人,所以当然可以很快地弄清楚这个社交网站中用户的信息啦。

她发现这个社交网站中有N个用户,用户和用户之间可以进行互动。小冰根据用户之间互动的次数和内容判断每对用户之间的亲密度。亲密度非负,若大于零表示这两个用户之间是好友关系。由于这个网站是活跃的,所以小冰会不停地更新用户之间的亲密度。

由于隐私保护,小冰无法知道每个用户的确切性别,但是作为一只很聪明的人工智能,小冰可以通过每个用户的行为来猜测性别。当然这种猜测是不准确的,小冰有可能会改变对一个用户的判断。

小冰想知道这个社交网络的八卦度是多少。八卦度的定义是社交网络中所有异性好友之间的亲密度之和。你能帮助她吗?

输入

第一行一个整数T,表示数据组数。接下来是T组数据,每组数据的格式如下:

第一行是三个整数N, M, Q,分别表示用户数、初始的好友对数、操作数。

第二行是N个空格隔开的数,第i个数表示i号用户的性别,用0或1表示。

接下来的M行,每行三个数x, y, z,代表初始状态用户x和用户y之间的亲密度是z。除此之外的用户之间的亲密度初始为0。

接下来是Q行,每行是以下三种操作中的一种:

1. “1 x”:改变用户x的性别

2. “2 x y z”:改变用户x与用户y之间的亲密度为z

3. “3”:询问八卦度

输出

对于每组数据首先输出一行”Case #X:”,X为测试数据编号。

接下来对于每一个询问,输出一行包含询问的八卦度。

数据范围

1 ≤ T ≤ 20

1 ≤ x, y ≤ N

0 ≤ z ≤ 100000

小数据

1 ≤ N, M ≤ 100

1 ≤ Q ≤ 1000

大数据

1 ≤ N, M, Q ≤ 100000

样例输入

1
3 2 8
0 1 0
1 2 1
1 3 1
3
1 1
1 2
3
2 2 3 2
3
1 2
3

样例输出

Case #1:
1
2
2
3

#include <iostream>
#include <string>
#include <vector>
#include <cstring>
#include <fstream>

using namespace std;

int gender[100010];

bool judge(int a,int b) {
    if(a==0 && b==1) return true;
    else if(a==1 && b==0) return true;
    else return false;
}

int main(int argc, const char * argv[]) {
    int T,N,M,Q,g,a,b,c;
    cin>>T;
    for(int i=1;i<=T;i++) {
        cin>>N>>M>>Q;
        vector<vector<int>> res(N+1,vector<int>(N+1));
        memset(gender,-1,sizeof(gender));
        for(int j=1;j<=N;j++) {
            cin>>g;
            gender[j]=g;
        }
        for(int j=0;j<M;j++) {
            cin>>a>>b>>c;
            res[a][b] = c;
            res[b][a] = c;
        }
        cout<<"Case #"<<i<<":"<<endl;
        int ops,userx;
        for(int j=0;j<Q;j++) {
            cin>>ops;
            if(ops==1) {
                cin>>userx;
                if(gender[userx]==0) gender[userx]=1;
                else if(gender[userx]==1) gender[userx]=0;
            }
            if(ops==2) {
                cin>>a>>b>>c;
                res[a][b] = c;
                res[b][a] = c;
            }
            if(ops==3) {
                int ans=0;
                for(int m=1;m<=N;m++) {
                    for(int n=1;n<=N;n++) {
                        if(res[m][n]!=0 && judge(gender[m],gender[n])==true) {
                            ans+=res[m][n];
                        }
                    }
                }
                cout<<ans/2<<endl;
            }
        }
        res.clear();
    }
    return 0;
}

    原文作者:qwurey
    原文地址: https://blog.csdn.net/yeruby/article/details/45308669
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞