ACdream 1213 Matrix Multiplication(矩阵乘法)

来源:互联网 发布:淘宝店自动充值软件 编辑:程序博客网 时间:2024/06/06 00:40

题目链接:http://acdream.info/problem?pid=1213

涉及的数学知识较多,包括矩阵的转置,矩阵的乘法,关联矩阵.....

刚开始是直接按照各个概念做的,结果MLE了,MLE代码如下

#include<cstdio>#include<iostream>#include<sstream>#include<cstdlib>#include<cstring>#include<string>#include<climits>#include<cmath>#include<algorithm>#include<queue>#include<vector>#include<stack>#include<set>#include<map>using namespace std;int n,m;int a[10005][5],v[10005][10005],v1[10005][10005];int main(){    int i,j;    while(~scanf("%d%d",&n,&m))    {        memset(v,0,sizeof(v));        memset(v1,0,sizeof(v1));        for(i=0;i<m;i++)            for(j=0;j<2;j++)            scanf("%d",&a[i][j]);        for(i=0;i<m;i++)            v[a[i][0]-1][a[i][1]-1]=v[a[i][1]-1][a[i][0]-1]=1;        for(i=0;i<n;i++)            for(j=0;j<m;j++)                v1[j][i]=v[i][j];        int sum=0,b=0,k=m;        while(k--)        {             for(i=0;i<n;i++)            {                int c=0;                for(j=0;j<m;j++)                {                    sum+=v[b][c++]*v1[j][i];                }            }            b++;        }        printf("%d\n",sum);    }    return 0;}

网上看了别人的题解后获得思路,下面是AC代码

#include<cstdio>#include<iostream>#include<sstream>#include<cstdlib>#include<cstring>#include<string>#include<climits>#include<cmath>#include<algorithm>#include<queue>#include<vector>#include<stack>#include<set>#include<map>using namespace std;int n,m;int a[100005];int main(){    int i,j;    while(~scanf("%d%d",&n,&m))    {        int u,v;        memset(a,0,sizeof(v));        for(i=1; i<=m; i++)        {            scanf("%d%d",&u,&v);            a[u]++;            a[v]++;        }        long long sum=0;        for(i=1; i<=n; i++)            sum+=a[i]*a[i];        printf("%lld\n",sum);    }    return 0;}



2 0