编程马拉松17C

原创 2016年08月30日 15:43:48

#include <algorithm>
#include <assert.h>
#include <complex>
#include <ctype.h>
#include <functional>
#include <iostream>
#include <limits.h>
#include <locale.h>
#include <map>
#include <math.h>
#include <queue>
#include <set>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <time.h>
#include <vector>
//#include <unordered_set>
//#include <unordered_map>

#pragma warning(disable:4996)
using namespace std;

#define mp make_pair
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair <ll, int> pli;
typedef pair <ldb, ldb> pdd;

int IT_MAX = 1 << 21;
const int MOD = 1000000007;
const int INF = 1034567891;
const ll LL_INF = 1234567890123456789ll;
const db PI = 3.141592653589793238;
const ldb ERR = 1E-12;
#define mem(x ,y ) memset(x , y , sizeof(x))
struct road{
    int x,y,w ;
}edg[50010];
ll w[105][105] ;
ll d[105][105][105] ;
ll sum[105] ;
const int mod = 1e9+7 ;
int n , m ;
void add(int s,int e,int w,int t){
    for(int z=1;z<=sqrt(w);z++)if(w % z == 0){
        int tmp1 = z , tmp2 = w / z ;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                ll sav1 = t * (d[tmp1][i][s] * d[tmp1][e][j] ) ;
                ll sav2 = t * (d[tmp2][i][s] * d[tmp2][e][j] ) ;
                d[tmp1][i][j] += sav1 ;
                if(tmp1 != tmp2) d[tmp2][i][j] += sav2 ;
                sum[tmp1] += sav1 ;
                if(tmp1 != tmp2) sum[tmp2] += sav2 ;
            }
        }
    }
}
int u[105] ;
int v[105] ;
void init(){
    for(int i=1;i<=100;i++) v[i] = 0 , u[i] = 1 ;
    u[1] = 1 ;
    for(int i=2;i<105;i++)if(!v[i]){
        for(int j=i;j<105;j+=i){
            v[j] = 1 ;
            if(j % (i*i) == 0) u[j] = 0 ;
            else u[j] *= -1 ;
        }
    }
}
int main() {
    init() ;
    cin >> n >> m ;
    for(int i=0;i<m;i++){
        scanf("%d%d%d" , &edg[i].x , &edg[i].y , &edg[i].w) ;
    }
    mem(d , 0) ;
    mem(sum , 0) ;
    ll ans = 0 ;
    for(int x=1;x<=100;x++){
        for(int i=1;i<=n;i++) d[x][i][i] = 1 ;
        for(int t=0;t<m;t++){
            if(edg[t].w % x == 0) d[x][edg[t].x][edg[t].y] ++ ;
        }
        for(int k=1;k<=n;k++){
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++)if(i!=j&&k!=j&&i!=k){
                    d[x][i][j] += d[x][i][k] * d[x][k][j] ;
                    d[x][i][j] %= mod ; 
                }
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++)if(i!=j){
                sum[x] += d[x][i][j] ;
                sum[x] %= mod ; 
            }
        }
        ans += sum[x] * u[x] ;
    }
    cout << ((ans % mod)+mod)%mod << endl ;
    int Q ; cin >> Q ;
    int ta , tb ;
    for(int q=0;q<Q;q++){
        cin >> ta >> tb ; ta -- ;
        int ts = edg[ta].x ; int te = edg[ta].y ;
        add(ts , te , edg[ta].w , -1) ;
        add(ts , te , tb , 1) ;
        edg[ta].w = tb ;
        ans = 0 ;
        for(int i=1;i<=100;i++){
            ans += sum[i] * u[i] ;
        }
        cout << ((ans % mod)+mod)%mod << endl ;
    }
}

用题解的方法还是没过,现在写在这,以后可以看代码,

我用的题解方法。不取mod不超时。取mod就超时。日了狗。以后再看啊

编程马拉松大赛试题及代码(C++实现)

前段时间牛客网举办了编程马拉松大赛,总共86道题,20天内完成。题目难度难中易都有。我发现这些题目,主要关注性能和思维。很多题目用常规方法是不能通过时间要求的。题目是来自于各大oj以及面试题。所以非常...
  • zhoubin1992
  • zhoubin1992
  • 2015年07月21日 13:51
  • 2700

OpenCV2马拉松第1圈——纵观全局

Version1和Version2的差别 OpenCV2和OpenCV1的一个主要差别就是1是C的版本,2是C++的版本 OpenCV有很多的模块 core,定义了许多数据结构和基本的函数im...
  • abcd1992719g
  • abcd1992719g
  • 2014年04月26日 20:52
  • 1917

弘扬文化,传承文明-西安第七届文化马拉松

第七届西安文化马拉松,在参赛前晚上临时决定报的名,因为周末也没有事情!那就去玩玩,跑跑吧!         周末的早晨,4点50就起床,收拾了下5点20分就出门了,打了个车,很快5点45分就到文马集合...
  • fengqingtao2008
  • fengqingtao2008
  • 2016年08月08日 12:40
  • 1703

obj-c编程17:键值观察(KVO)

说完了前面一篇KVC,不能不说说它的应用KVO(Key-Value Observing)喽。KVO类似于ruby里的hook功能,就是当一个对象属性发生变化时,观察者可以跟踪变化,进而观察或是修正这个...
  • mydo
  • mydo
  • 2014年07月06日 19:15
  • 1323

Unix/Linux环境C编程入门教程(17) Gentoo LinuxCCPP开发环境搭建

安装Gentoo LinuxCCPP开发环境1. Gentoo Linux是一套通用的、快捷的、完全免费的Linux发行,它面向开发人员和网络职业人员。与其他发行不同的是,Gentoo Linux拥有...
  • yincheng01
  • yincheng01
  • 2014年06月27日 17:47
  • 1283

DirectX 9.0c游戏开发手记之RPG编程自学日志之17: Drawing with DirectX Graphics (用DirectX图形绘图)(第13节)

本文由哈利_蜘蛛侠原创,转载请注明出处!有问题请联系2024958085@qq.com           这一次我们继续来讲述Jim Adams 老哥的RPG编程书籍第二版第二章的第13节:Work...
  • u011873969
  • u011873969
  • 2014年09月30日 09:58
  • 989

<PY><core python programming笔记>C17 网络客户端编程

 C17 网络客户端编程 17.2文件传输 FTP FTP仅使用TCP,不使用UDP 两个套接字,对于主动,21号端口做控制和命令,20号端口做数据端口 对于被动,21号端口做控制和...
  • awsxsa
  • awsxsa
  • 2014年05月25日 15:45
  • 867

51Nod 算法马拉松17 Simple KMP 链剖维护SAM的fail树

题目大意化简一下题意! 现在给你一个长度为NN的字符串,对于每个字符ii,我们要统计AnsiAns_i为前ii个字符有多少个相同的子串,并且其中一个子串一定要经过位置ii。在第ii行输出∑jj=1A...
  • YxuanwKeith
  • YxuanwKeith
  • 2016年08月29日 11:12
  • 607

51Nod 算法马拉松17 最好的排列 贪心求解加高精度

题目大意我们定义“排列的价值”为所有区间的最大值之和。一个最好的排列,应当是在所有排列中,价值最高的。现在有NN个整数,他们是从11到NN且两两互不相同。现在要把他们重新排列一下,使得排列的价值最大。...
  • YxuanwKeith
  • YxuanwKeith
  • 2016年08月29日 11:24
  • 589

51NOD 1537 分解(矩阵快速幂)——算法马拉松17(告别奥运)

传送门问 (1+2√)n(1+\sqrt 2) ^n 能否分解成 m−−√+(√m−1)\sqrt m +\sqrt(m-1)的形式 如果可以 输出 m MOD (109+7)m\ MOD\ (1...
  • qingshui23
  • qingshui23
  • 2016年08月29日 09:59
  • 688
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程马拉松17C
举报原因:
原因补充:

(最多只允许输入30个字)