题解

基尔霍夫矩阵,外向树是入度矩阵-邻接矩阵

必须删掉第一行第一列然后再求行列式

代码

  1. #include <bits/stdc++.h>
  2. #define fi first
  3. #define se second
  4. #define pii pair<int, int>
  5. #define pdi pair<db, int>
  6. #define mp make_pair
  7. #define pb push_back
  8. #define enter putchar('\n')
  9. #define space putchar(' ')
  10. #define eps 1e-8
  11. #define mo 974711
  12. #define MAXN 1000005
  13. //#define ivorysi
  14. using namespace std;
  15. typedef long long int64;
  16. typedef double db;
  17. template <class T>
  18. void read(T &res) {
  19. res = 0;
  20. char c = getchar();
  21. T f = 1;
  22. while (c < '0' || c > '9') {
  23. if (c == '-') f = -1;
  24. c = getchar();
  25. }
  26. while (c >= '0' && c <= '9') {
  27. res = res * 10 + c - '0';
  28. c = getchar();
  29. }
  30. res *= f;
  31. }
  32. template <class T>
  33. void out(T x) {
  34. if (x < 0) {
  35. x = -x;
  36. putchar('-');
  37. }
  38. if (x >= 10) {
  39. out(x / 10);
  40. }
  41. putchar('0' + x % 10);
  42. }
  43. const int MOD = 10007;
  44. int g[255][255], N, M;
  45. int inc(int a, int b) { return a + b >= MOD ? a + b - MOD : a + b; }
  46. int mul(int a, int b) { return 1LL * a * b % MOD; }
  47. int fpow(int x, int c) {
  48. int res = 1, t = x;
  49. while (c) {
  50. if (c & 1) res = mul(res, t);
  51. t = mul(t, t);
  52. c >>= 1;
  53. }
  54. return res;
  55. }
  56. int determinant() {
  57. int res = 1;
  58. for (int i = 2; i <= N; ++i) {
  59. int l;
  60. for (l = i; l <= N; ++l) {
  61. if (g[l][i]) break;
  62. }
  63. if (l != i) {
  64. res = -res;
  65. for (int j = i; j <= N; ++j) swap(g[i][j], g[l][j]);
  66. }
  67. int inv = fpow(g[i][i], MOD - 2);
  68. for (int j = i + 1; j <= N; ++j) {
  69. int t = mul(g[j][i], inv);
  70. if (t) {
  71. for (int k = i; k <= N; ++k) {
  72. g[j][k] = inc(g[j][k], MOD - mul(t, g[i][k]));
  73. }
  74. }
  75. }
  76. }
  77. res = (res + MOD) % MOD;
  78. for (int i = 2; i <= N; ++i) {
  79. res = mul(res, g[i][i]);
  80. }
  81. return res;
  82. }
  83. void Solve() {
  84. read(N);
  85. read(M);
  86. int u, v;
  87. for (int i = 1; i <= M; ++i) {
  88. read(u);
  89. read(v);
  90. ++g[u][u];
  91. --g[v][u];
  92. }
  93. for (int i = 1; i <= N; ++i) {
  94. for (int j = 1; j <= N; ++j) {
  95. g[i][j] = inc(g[i][j], MOD);
  96. }
  97. }
  98. out(determinant());
  99. enter;
  100. }
  101. int main() {
  102. #ifdef ivorysi
  103. freopen("f1.in", "r", stdin);
  104. #endif
  105. Solve();
  106. return 0;
  107. }

【LOJ】#2532. 「CQOI2018」社交网络的更多相关文章

  1. loj#2531. 「CQOI2018」破解 D-H 协议(BSGS)

    题意 题目链接 Sol 搞个BSGS板子出题人也是很棒棒哦 #include<bits/stdc++.h> #define Pair pair<int, int> #defin ...

  2. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  3. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  4. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  5. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

  6. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

  7. Loj #3059. 「HNOI2019」序列

    Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...

  8. Loj #3056. 「HNOI2019」多边形

    Loj #3056. 「HNOI2019」多边形 小 R 与小 W 在玩游戏. 他们有一个边数为 \(n\) 的凸多边形,其顶点沿逆时针方向标号依次为 \(1,2,3, \ldots , n\).最开 ...

  9. Loj #3055. 「HNOI2019」JOJO

    Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...

随机推荐

  1. BZOJ 4569 [Scoi2016]萌萌哒 | ST表 并查集

    传送门 BZOJ 4569 题解 ST表和并查集是我认为最优雅(其实是最好写--)的两个数据结构. 然鹅!他俩加一起的这道题,我却--没有做出来-- 咳咳. 正解是这样的: 类似ST表有\(\log ...

  2. MathExam V2.0

    # 隔壁村小学的小朋友都羡慕哭了2.0版 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 1 ...

  3. PASCAL VOC数据集分析(转)

    PASCAL VOC数据集分析 PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge. 本文主要分析PASCAL V ...

  4. np.random.choice方法

    np.random.choice方法 觉得有用的话,欢迎一起讨论相互学习~Follow Me def choice(a, size=None, replace=True, p=None) 表示从a中随 ...

  5. C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)

    前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上 ...

  6. [原]Android 初遇Http错误 httpClient.execute

    错误源头: HttpResponse response = httpClient.execute(httpget); 错误信息: android.os.NetworkOnMainThreadExcep ...

  7. 关于cookie和session

    在设置cookie的时候,它会保留在本地,无论你有没有退出浏览器都是.但是session只能在登录状态有效.退出浏览器过后就会消除掉.同时设置也是有问题的. @app.route('/login',m ...

  8. 【密码学】RSA算法过程-求解密钥

    1.密钥的计算获取过程 密钥的计算过程为:首先选择两个质数p和q,令n=p*q. 令k=ϕ(n)=(p−1)(q−1),原理见2的分析 选择任意整数d,保证其与k互质 取整数e,使得[de]k=[1] ...

  9. Linux驱动技术(五) _设备阻塞/非阻塞读写【转】

    转自:http://www.cnblogs.com/xiaojiang1025/p/6377925.html 等待队列是内核中实现进程调度的一个十分重要的数据结构,其任务是维护一个链表,链表中每一个节 ...

  10. Linux驱动技术(四) _异步通知技术【转】

    转自:https://www.cnblogs.com/xiaojiang1025/p/6376561.html 异步通知的全称是"信号驱动的异步IO",通过"信号&quo ...