博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zoj 2316 Matrix Multiplication 解题报告
阅读量:5013 次
发布时间:2019-06-12

本文共 1518 字,大约阅读时间需要 5 分钟。

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2316

题目意思:有 N 个 点,M 条 边。需要构造一个N * M 大小的矩阵A。对于 (i, j) 这个坐标点它表示,对编号为 i 这个点编号为 j 的 点与它相连,此时标记(i, j) 为1,如果坐标点没有跟这条 j 的边相连,就标记为0。构造完这个矩阵A之后,需要求出它的转置矩阵AT,算出 ATA 的和。

     新学期第一场比赛!刚开始真是打算直接做的,但是数据太大了, 2 <= N <= 10 000, 1 <= M <= 100 000,只能通过观察来简化,最后做了3个多小时,终于想出来了= =!大感动!专门补了下矩阵的知识......

     规律真的需要手动算下才能发现的!!!后来还犯了个低级错误,忘记清空了。每个Test 都需要啦。最后就是格式问题。每个output之间输出一个空行。

    贴个代码纪念下。

    

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 7 typedef long long LL; 8 const int N = 10000 + 2; 9 10 LL A[N], ans;11 12 int main()13 {14 int T, n, m, v1, v2;15 while (scanf("%d", &T) != EOF)16 {17 while (T--)18 {19 int maxi = -1;20 scanf("%d%d", &n, &m);21 memset(A, 0, sizeof(A));22 for (int i = 1; i <= m; i++)23 {24 scanf("%d%d", &v1, &v2);25 A[v1]++; // 算出每个点连着多少条边26 A[v2]++;27 int tm = max(v1, v2); 28 maxi = max(maxi, tm); // 求出最大那个点的编号29 }30 ans = 0;31 for (int i = 1; i <= maxi; i++)32 {33 if (A[i])34 ans += A[i] * A[i];35 }36 printf("%lld\n", ans);37 if (T)38 puts("");39 }40 }41 return 0;42 }

    

转载于:https://www.cnblogs.com/windysai/p/3951870.html

你可能感兴趣的文章
sed 常用操作纪实
查看>>
C++复习:对C的拓展
查看>>
校外实习报告(九)
查看>>
android之android.intent.category.DEFAULT的用途和使用
查看>>
CAGradientLayer 透明渐变注意地方(原创)
查看>>
织梦DEDE多选项筛选_联动筛选功能的实现_二次开发
查看>>
iOS关于RunLoop和Timer
查看>>
已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
查看>>
MySQL的随机数函数rand()的使用技巧
查看>>
thymeleaf+bootstrap,onclick传参实现模态框中遇到的错误
查看>>
python字符串实战
查看>>
wyh的物品(二分)
查看>>
12: xlrd 处理Excel文件
查看>>
综合练习:词频统计
查看>>
中文url编码乱码问题归纳整理一
查看>>
Cesium应用篇:3控件(3)SelectionIndicator& InfoBox
查看>>
58. Length of Last Word(js)
查看>>
前端面试题汇总(持续更新...)
查看>>
如何成为F1车手?
查看>>
QT自定义消息
查看>>