草庐IT

csp201809-4

yds0823 2023-03-28 原文

这是一道差分约束最长路的图的问题:

通过已知的条件可以容易列出以下不等式:

2*a1<=x1+x2<=2*a1+1

3*a2<=x1+x2+x3<=3*a2+2

3*a3<=x2+x3+x4<=3*a3+2

                .......

3*an-1<=xn-2+xn-1+xn<=3*an-1+2

2*an<=xn-1+xn<=2*an+1

以及xn>=1

我们可以通过一些简单的移项将其变成:

xi+xk>=num1  ; -xi-xk>=-num2        

或者

xi+xj+xk>=num1 ;  -(xi+xj+xk)>=-num2

可以定义Sj=x0+x1+....xj,那么就可以转换为:

Sj-Si>=num的状态,其几何含义为从i点到j点的长度最小为num

想要求得x的最小值,那么就需要求得num的最大值,由此转换为求图的最长路的问题,鉴于其存在负权路,那么使用SPFA最好。

#include<bits/stdc++.h>
using namespace std;
int a[305];
int dis[305];
int vis[305];
vector<pair<int,int>>G[305];
int n;
void SPFA(){//存在负权求最长路
    for(int i=0;i<=n;i++){dis[i]=0,vis[i]=0;}
    vis[0]=1;
    queue<int> p;
    p.push(0);
    while(!p.empty()){
        int now=p.front();p.pop();
        for(int i=0;i<G[now].size();i++){
            if(dis[G[now][i].first]<dis[now]+G[now][i].second){
                dis[G[now][i].first]=dis[now]+G[now][i].second;
                if(vis[G[now][i].first]!=1){
                    p.push(G[now][i].first);
                }
            }
        }
        vis[now]=0;
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=0;i<=n;i++){
        G[0].push_back({i,0});//超级源点
    }
    for(int i=0;i<n;i++){
        G[i].push_back({i+1,1});//x大于0
    }
    G[0].push_back({2,2*a[1]});
    G[2].push_back({0,-2*a[1]-1});
    G[n-2].push_back({n,2*a[n]});
    G[n].push_back({n-2,-2*a[n]-1});
    for(int i=2;i<=n-1;i++){
        G[i-2].push_back({i+1,3*a[i]});
        G[i+1].push_back({i-2,-3*a[i]-2});
    }
    SPFA();
    for(int i=1;i<=n;i++){
        cout<<dis[i]-dis[i-1]<<" ";
    }
}

超级源点的使用是防止图不连通,其另一个作用是初始化最长路为0。

那么Sj就是超级源点到j点的最长路dis[j]了,求出xj的方法就是Sj-Sj-1=dis[j]-dis[j-1]

代码AC

 

有关csp201809-4的更多相关文章

  1. IGH主站通信测试csp模式(DC同步 preemrt)连通一从站并实现控制 - 2

    IGH主站通信测试linuxcnc配置基础机器人控制LinuxCNC与EtherCAT介绍&&PDO&SDO,搭建环境步骤需要配置IGH主站的查看这篇文章linux系统学习笔记7——一次性安装igh-ethercat主站CSP模式DC同步方式preemrt实时补丁直接上代码,这部分是直接控制使用csp模式控制一个从站运动使能后直接运动,10s,每秒607a(目标位置)增加100.注意:急停按下ESC代码分为两部分,一个是通信线程主要负责和伺服通信,使能伺服,读取和写入寄存器值。第二个是操作线程,负责修改位置的值,和监控按键。使用此代码,首先根据手册1.修改PDO条目,要和自己的伺服一致2.修改

  2. Firefox 中带有 CSP 的 Javascript 书签 - 2

    我有一个简单的Javascript书签,我把它放在一起以针对外部工具运行适当的GitHub存储库的内容:javascript:(function(){varisApex=false;varsourceLangs=document.getElementsByClassName('lang');for(vari=0;i当我在Chrome或IE中运行它时(在通过DaringFireball的JS书签生成器运行它之后,它工作正常。在Firefox中,它生成内容安全策略错误:[15:33:19.318]ContentSecurityPolicy:Directiveinlinescriptbase

  3. javascript - 如何在不违反内联脚本 CSP 的情况下使用 jinja2 服务器端渲染和 react - 2

    我是React的新手,正在尝试一些。我想在使用Jinja2模板的Flask站点上使用它。人们似乎建议首先在服务器端呈现数据,而不必总是在页面加载时对数据进行初始调用。我找到了这个nodejs示例,但它只是将页面上的数据放在内联脚本标记中的全局变量中。我想知道除了将页面上的数据放在内联脚本标记内之外,是否有一种干净的方法可以做到这一点。由于我的安全CSP策略,我不能使用内联脚本或eval。人们是否使用标准模式在不使用内联变量的情况下在服务器上为React呈现数据? 最佳答案 您当然可以在通过Jinja进行服务器端呈现的站点上使用它。问

  4. javascript - Google Analytics 将跟踪发送到国家域,因此被 CSP 阻止 - 2

    我像这样嵌入分析:然后我像这样向CSP添加了一些google域:BrowserPolicy.content.allowScriptOrigin("*.google-analytics.com");BrowserPolicy.content.allowImageOrigin("*.google.com");这加载正常,但是一旦Analytics尝试发送一些跟踪信息,它有时会尝试从google.pl(基于位置)加载图像。有什么办法可以确保只使用.com?我显然无法在CSPheader中列出所有google域。准确的错误是:Refusedtoloadtheimage'https://www.

  5. javascript - 来自源 'undefined' 的脚本在 CSP 中意味着什么? - 2

    我最近从stripe.jsv2转移到了stripe.jsv3/elements。作为其中的一部分,我收到了新的CSP错误。这些似乎不会导致Stripe失败,但我想了解它们:ContentSecurityPolicy:Thepage'ssettingsblockedtheloadingofaresourceatself("script-src").Source:;undefined.elements-inner-card-15fb9df8718486f330c3990dde96bfd7.html:1ContentSecurityPolicy:Thepage'ssettingsblocke

  6. javascript - CSP 安全的 ES6 模板文字 - 2

    是否有一个模板引擎可以解析ES6templateliterals样式的模板?(例如"string${var}")而不违反脚本评估的内容安全策略(CSP)限制?CSPrestrictionsonscriptevaluation防止eval、newFunction、setTimeout(string)和setInterval(string)。有许多模板引擎可以提供或修改以提供类似于ES6风格的模板文字,例如JohnResig的MicroTemplates,lodash_.template和DoT.js.然而,所有这些似乎都通过使用newFunction违反了CSP。如果var可以是不受限制

  7. javascript - 使用 CSP 在 Web Worker 中启用 'new Function' - 2

    我无法让newFunction在WebWorker中工作。我有一个生成WebWorker的HTML页面。这个WebWorker通过newFunction(str)执行代码。我正在尝试在打包的Chrome应用程序中使用它,这需要使用eval类代码的页面在list中明确列为沙盒页面。现在,有两个选择:Do列出要沙盒化的页面。如果这样做,我可以使用newFunction,但我无法生成WebWorker,因为我无法发出任何请求(沙盒页面具有唯一来源)。newWorker(...)抛出一个SECURITY_ERR。newFunction在沙箱中工作newWorker由于唯一来源而在沙箱中失败不要

  8. javascript - 捕获内容安全策略 (CSP) 错误 - 2

    我使用此方法通过eval检测CSP(也用于AngularJS):functionnoUnsafeEval(){try{newFunction('');returnfalse;}catch(err){returntrue;}}但我手头没有带有CSP的服务器来对其进行彻底测试。可靠吗?代码中存在newFunction('')行会导致无法捕获的错误吗?什么是err?那里捕获了哪种错误(Error、TypeError等)?CSP错误的消息是什么意思?我在CSP中找不到关于运行时错误的文档。 最佳答案 关于如何检测CSP,还有一个stacko

  9. javascript - 使用 javascript 检测 CSP 违规 - 2

    是否可以使用javascript检测违反内容安全策略的行为?我的CSP工作并发送其报告,我看到一些url被注入(inject),可能是由浏览器插件注入(inject)的。我想向用户显示一个提示,一些插件试图修改页面。我能以某种方式检测到与javascript的中止连接吗(当然它本身在CSP中被列入白名单)? 最佳答案 根据W3CCSPspecification,违反会触发securitypolicyviolation事件。您可以为此添加一个事件监听器。document.addEventListener("securitypolicy

  10. javascript - 在 Firefox 中使用 csp sha-256 将内联脚本列入白名单 - 2

    我无法通过校验和获得白名单以在Firefox(52.0.2,Windows)中工作。根据caniuse,Firefox支持内容安全策略版本2,因此应该支持校验和。当chrome阻止内联脚本时,它会将所需的sha-256打印到控制台。将其添加到csp规则成功将脚本列入白名单。校验和也与计算的相同https://report-uri.io/home/hash但是firefox不接受。我注意到MDN文档中的示例使用base-16而不是base-64编码作为校验和。https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content

随机推荐