这是一道差分约束求最长路的图的问题:
通过已知的条件可以容易列出以下不等式:
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

IGH主站通信测试linuxcnc配置基础机器人控制LinuxCNC与EtherCAT介绍&&PDO&SDO,搭建环境步骤需要配置IGH主站的查看这篇文章linux系统学习笔记7——一次性安装igh-ethercat主站CSP模式DC同步方式preemrt实时补丁直接上代码,这部分是直接控制使用csp模式控制一个从站运动使能后直接运动,10s,每秒607a(目标位置)增加100.注意:急停按下ESC代码分为两部分,一个是通信线程主要负责和伺服通信,使能伺服,读取和写入寄存器值。第二个是操作线程,负责修改位置的值,和监控按键。使用此代码,首先根据手册1.修改PDO条目,要和自己的伺服一致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
我是React的新手,正在尝试一些。我想在使用Jinja2模板的Flask站点上使用它。人们似乎建议首先在服务器端呈现数据,而不必总是在页面加载时对数据进行初始调用。我找到了这个nodejs示例,但它只是将页面上的数据放在内联脚本标记中的全局变量中。我想知道除了将页面上的数据放在内联脚本标记内之外,是否有一种干净的方法可以做到这一点。由于我的安全CSP策略,我不能使用内联脚本或eval。人们是否使用标准模式在不使用内联变量的情况下在服务器上为React呈现数据? 最佳答案 您当然可以在通过Jinja进行服务器端呈现的站点上使用它。问
我像这样嵌入分析:然后我像这样向CSP添加了一些google域:BrowserPolicy.content.allowScriptOrigin("*.google-analytics.com");BrowserPolicy.content.allowImageOrigin("*.google.com");这加载正常,但是一旦Analytics尝试发送一些跟踪信息,它有时会尝试从google.pl(基于位置)加载图像。有什么办法可以确保只使用.com?我显然无法在CSPheader中列出所有google域。准确的错误是:Refusedtoloadtheimage'https://www.
我最近从stripe.jsv2转移到了stripe.jsv3/elements。作为其中的一部分,我收到了新的CSP错误。这些似乎不会导致Stripe失败,但我想了解它们:ContentSecurityPolicy:Thepage'ssettingsblockedtheloadingofaresourceatself("script-src").Source:;undefined.elements-inner-card-15fb9df8718486f330c3990dde96bfd7.html:1ContentSecurityPolicy:Thepage'ssettingsblocke
是否有一个模板引擎可以解析ES6templateliterals样式的模板?(例如"string${var}")而不违反脚本评估的内容安全策略(CSP)限制?CSPrestrictionsonscriptevaluation防止eval、newFunction、setTimeout(string)和setInterval(string)。有许多模板引擎可以提供或修改以提供类似于ES6风格的模板文字,例如JohnResig的MicroTemplates,lodash_.template和DoT.js.然而,所有这些似乎都通过使用newFunction违反了CSP。如果var可以是不受限制
我无法让newFunction在WebWorker中工作。我有一个生成WebWorker的HTML页面。这个WebWorker通过newFunction(str)执行代码。我正在尝试在打包的Chrome应用程序中使用它,这需要使用eval类代码的页面在list中明确列为沙盒页面。现在,有两个选择:Do列出要沙盒化的页面。如果这样做,我可以使用newFunction,但我无法生成WebWorker,因为我无法发出任何请求(沙盒页面具有唯一来源)。newWorker(...)抛出一个SECURITY_ERR。newFunction在沙箱中工作newWorker由于唯一来源而在沙箱中失败不要
我使用此方法通过eval检测CSP(也用于AngularJS):functionnoUnsafeEval(){try{newFunction('');returnfalse;}catch(err){returntrue;}}但我手头没有带有CSP的服务器来对其进行彻底测试。可靠吗?代码中存在newFunction('')行会导致无法捕获的错误吗?什么是err?那里捕获了哪种错误(Error、TypeError等)?CSP错误的消息是什么意思?我在CSP中找不到关于运行时错误的文档。 最佳答案 关于如何检测CSP,还有一个stacko
是否可以使用javascript检测违反内容安全策略的行为?我的CSP工作并发送其报告,我看到一些url被注入(inject),可能是由浏览器插件注入(inject)的。我想向用户显示一个提示,一些插件试图修改页面。我能以某种方式检测到与javascript的中止连接吗(当然它本身在CSP中被列入白名单)? 最佳答案 根据W3CCSPspecification,违反会触发securitypolicyviolation事件。您可以为此添加一个事件监听器。document.addEventListener("securitypolicy
我无法通过校验和获得白名单以在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