图论--差分约束

2023-11-12

小引入

如果一个系统由n个变量和m个约束条件组成,形成如xi-xj<=k(ij∈[1, n])的不等式,则称其为查分约束系统。写成一个矩阵形式的不等式组的话则系数有且仅有一个1和一个-1。

 

解这种不等式组为何会与图论扯上关系呢?在我们求解最短路或者是最长路时会有松弛操作

if(dis[v] > dis[u] + w) { // 求解最短路,移相后为dis[v] - dis[u] > w
    dis[v] = dis[u] + w; // 求出的dis[v] 满足 dis[v] - dis[u] <= w
    ...
}
if(dis[v] < dis[u] + w) { // 求解最长路,移相后为dis[v] - dis[u] < w
    dis[v] = dis[u] + w; // 求出的dis[v]满足 dis[v] - dis[u] >= w
    ...
}

可以发现在松弛操作移相之后我们看到式子变成了关于dis[i]的多元不等式方程且系数只有1和-1,符合我们的查分约束系统。通过注释的分析我们可以看到第一个条件松弛球的是最短路,求出的dis[v]是满足方程的dis[v]-dis[u] <= w的最大解,因为dis每次取得都是<=中得=号,相当于取了上界——所以对于x1-x2<=w的不等式组我们可以转换为求最短路来求出满足条件的最大解。同理对于x1-x2>=w的不等式组我们可以转换为求最长路来求出满足所有约束条件的最小解这里要注意不等式方程要满足等号不能严格的大于小于。and,差分约束是用来求解方程的,所以最初始的任务先是要确定未知数是什么,未知数若没有事先明确,很容易会混淆自己到底在求什么。未知数的选取往往还关系到最后能否成功求解,

  

由于此时的边权可能会涉及到负数--所以不能使用dijkstra,只能用bellman-ford或者spfa,因为spfa其实就是bellman-ford的队列优化版,一般直接考虑使用spfa就好了。下面通过例题来练一练。

就题论事

题目:XXZZY hdu1317

基本大意:一张n个点的图,你初始有100的基础值,每到一个点就加上该点的权值(可正可负),问在自身能量不耗尽的情况下是否能到达终点。

  

哈~没有错,这道题跟查分约束没有什么关系,只是先来对spfa练练手~若图中存在正环则必能赢--所以一共有两种可以获胜的情况:存在正环,不需正环就直接到达。

 

这里我想提一下判断负环正环的原理(这里单举负环,正环是一样的):bellman-ford算法是通过不断地循环遍历所有边来找到最短路,第一次遍历所有边就可以找到通过一条边到源点的最短路,第二次遍历就可以找到通过两条边到源点的最短路……由于n个点的最短路最多可能有n-1条边,所以最多遍历n-1次就可以确定最短路,注意这里是最多,所以为了提高效率往往在每一次遍历完边后会判断一下该次遍历是由进行了松弛操作,若没有进行松弛操作则说明最短路已经确定可以直接结束循环。若进行了n-1次仍然还能够进行松弛则说明存在负环,不可能找到最短路。

/* 注意这个只是单纯的伪码哦~ */
bool keep = true;
for(int i=0; i<n-1; ++i) {
    for(int e=1; e<=m; ++e) {
        if(dis[v] > dis[u] + w) {
            dis[v] = dis[u] + w;
            keep = false;
        }
    }if(!keep) break; // 该轮遍历没有进行松弛, 已经确定了最短路
}
for(int e=1; e<=m; ++e) // 再遍历一次所有边检查是否还能松弛
    if(dis[v] > dis[u] + w) 
        ...存在负环...

 

spfa则是bellman-ford的队列优化,优化在于更新了某一点v的最短路后只继续遍历与v相连的所有边而不是每次都暴力遍历所有边。对比原本的bellman-ford我们可以发现其实bellman-ford的每一暴力枚举所有边能进行松弛的其实也都是与更新过的点相连的边。

 

使用了队列就变成了层次的遍历,所以在spfa中每次点v入队其实就是到v有经过更多边的一条路,BECAUSE每一次再入队时v所在的层次一定比它上一次高!那么在最坏的情况下,假设每次v入队所在的层次边只增加了一条,那么在有n个点的图中由于最短路最多只可能有n-1条边,所以v的入队次数最多只有n-1次,如果入队次数超过了n-1次那么必然存在负环始得最短路不存在!

 

所以用spfa时判断是否存在负环的办法是记录算法过程中每个点的入队次数,(入队次数)>(总点数-1)则存在负环。注意有一个大前提-->图要连通。对于最长路判断正环同理可得~

/* 求最短路为例子 
while循环的可靠性:因为spfa在每次循环是不断松弛,松弛成功才入队
所以若存在最短路则必然有松弛完的时候,否则存在负环
*/
struct Edge { // 链式向前星存图
    int to, w, nxt;
}e[M];
int hd[N], cnte, dis[N], inq[N], cn[N];
void spfa(const int& s) {
    memset(dis, 0x3f, sizeof(dis)), 
     memset(inq, false, sizeof(inq)),  // bool inq[N]数组判断某点是否已经在队列中,如果已经在队列中则没有必要再入队
       memset(cn, 0, sizeof(cn));  // int cn[N]数组统计每点的入队次数
     queue<int> q;     while(q.size()) q.pop();
     dis[s] = 0;
     q.push(s), inq[s] = true;
     while(q.size()) {
         int u = q.front();
         q.pop(), inq[u] = false;
         for(int i=hd[u]; i; i=e[i].nxt) { // 遍历该点的所有出边
             int v = e[i].to;
             if(dis[v] > dis[u] + e[i].w) {
                 dis[v] = dis[u] + e[i].w;
                 if(!inq[v]) {  // 不在队中则将该点入队
                     if(++cn[v] > n-1) { ...存在负环, 无最短路... return; }
                     q.push(v), inq[v] = true;
                 }
             }
         }
     }return; // 求最短路成功
}

好啦是时候给出这道题的题解啦

/*
hdu 1317 
@auther Bankarian
tips: 求最长路时, dis初始化为-oo
        求最短路时, dis初始化为+oo, 注意不要混啦
*/
#include <cstdio>
#include <cstring>
#include <queue>
#define Inf 0x3f3f3f3f
using namespace std;
const int N = 150;
bool can[N][N];
struct Edge {
    int to, nxt;
}e[N*100];  // 最多每个点与100个点相连,边数max=n*100
int hd[N], cnte;
int dis[N], cn[N], w[N];
bool inq[N];
int n;

inline void add_edge(const int& from, const int& to) {
    ++cnte;
    e[cnte].to = to, e[cnte].nxt = hd[from];
    hd[from] = cnte;
    return;
}

inline bool floyd() { // 传递闭包预处理
    for(int k=1; k<=n; ++k)
        for(int i=1; i<=n; ++i)
            for(int j=1; j<=n; ++j) 
                can[i][j] |= can[i][k] & can[k][j];
    return can[1][n];
}

bool spfa() {
    queue<int> q; while(q.size()) q.pop();
    q.push(1);
    dis[1] = 100, inq[1] = true, cn[1] = 1;
    while(q.size()) {
        int u = q.front();
        q.pop(), inq[u] = false;
        if(u == n) return true;
        for(int i=hd[u]; i; i=e[i].nxt) {
            int v = e[i].to;
            int tmp = dis[u] + w[v]; 
            if(tmp > 0 && dis[v] < tmp && (can[v][n] || v == n)) { // 找正环即找最长路
                dis[v] = tmp;
                if(!inq[v]) {
                    if(++cn[v] > n-1) return true; // 存在正环
                    q.push(v), inq[v] = true;
                }
            }
        }
    }return false;
}

void __ini__() {
    memset(hd, 0, sizeof(hd));
    for(int i=1; i<=n; ++i) dis[i] = -Inf;
    memset(inq, false, sizeof(inq));
    memset(cn, 0, sizeof(cn));
    memset(can, false, sizeof(can));
    cnte = 0;
    return;
}
int main() {
    while(scanf("%d", &n) != EOF && n != -1) {
        __ini__();
        for(int i=1; i<=n; ++i) {
            int a, b, c;    scanf("%d %d", &a, &b);
            w[i] = a;
            for(int j=0; j<b; ++j) {
                scanf("%d", &c);
                add_edge(i, c), can[i][c] = true;
            }
        }
        if(!floyd()) puts("hopeless");
        else {
            if(spfa()) puts("winnable");
            else puts("hopeless");
        }
    }
    return 0;
}
XXYYZ

 

题目:poj2983 

题目算是比较直白的了我就不再复述。我们统一假设往北为正方向,这里我们要求解的未知量为距离。AB之间的距离要怎么表示才能构造出差分约束系统呢~我们可以自己假定一个源点,B到源点的距离为dis[b],A到源点的距离为dis[a],那么AB之间的距离就是dis[b]-dis[a]了,接着dis[]就是我们差分方程求解的未知数了之后会看到超级源点会经常用在差分约束中来保证图是连通的

  

  • V:的情况很好列:dis[b] - dis[a] >= 1,移相后就是松弛操作dis[a] <= dis[b] - 1,这么移是因为个人喜欢利用最短路来求,如果用的是最长路来求则移相为>=的形式即可;
  • P的情况是=,其实就是既>=又<=而已,同理列两个不等号方向统一的不等式;
  • 最后再将超级源点与所有点连通保证图的连通性
  • 由于我们增加了超级源点,所以总的点数一共是n个,所以入队次数的判断终止是n次。
/*poj 2983*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#define Inf 0x3f3f3f3f
#define ll long long
using namespace std;
const int N = 1e3+4, M = 1e5 + 4;
struct Edge {
    int to, w, nxt;
    Edge(int a=0, int b=0, int c=0): to(a), w(b), nxt(c) {}
}e[M*4];
int hd[N], cnte;
int dis[N], cn[N];
bool inq[N];
int n, m;
inline void add_edge(const int& f, const int& t, const int& w) {
    ++cnte;        e[cnte] = Edge(t, w, hd[f]);
    hd[f] = cnte;    return;
}

inline int read() {
    int ans = 0, tmp = 1; 
    char ch = getchar();
    while(ch < '0' || ch > '9') {
        if(ch == '-') tmp = -1;
        else if(ch == 'P') return (int) ch;
        else if(ch == 'V') return (int) ch;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9') {
        ans = (ans << 3) + (ans << 1) + ch-'0';
        ch = getchar();
    }return ans * tmp;
} 

inline void __ini__() {
    for(int i=0; i<=n; ++i) dis[i] = Inf;
    memset(inq, false, sizeof(inq));
    memset(hd, 0, sizeof(hd));
    memset(cn, 0, sizeof(cn));
    cnte = 0;
    return;
}

bool spfa(const int& s) {
    queue<int> q;    while(q.size()) q.pop();
    q.push(s);
    inq[s] = true, cn[s] += 1, dis[s] = 0;
    while(q.size()) {
        int u = q.front(); q.pop();
        inq[u] = false;
        for(int i=hd[u]; i; i=e[i].nxt) {
            int v = e[i].to;
            if(dis[v] > dis[u] + e[i].w) {
                dis[v] = dis[u] + e[i].w;
                if(!inq[v]) {
                    if(++cn[v] > n) return false; // 一共n+1个点
                    inq[v] = true, q.push(v);
                }
            }
        }
    }return true;
}
int main() {
    while(scanf("%d %d", &n, &m) != EOF) {
        __ini__();
        for(int i=0; i<m; ++i) {
            char ch = (char) read(); 
            if(ch == 'P') { // 精确
                int a = read(), b = read(), c = read();
                add_edge(b, a, -c), 
                    add_edge(a, b, c);
            }else {
                int a = read(), b = read();
                add_edge(b, a, -1);
            }
        }
        for(int i=1; i<=n; ++i) add_edge(0, i, 0); // 超级源点!!只是为了图连通
        if(spfa(0)) puts("Reliable");
        else puts("Unreliable");
    }
    return 0;
}
poj2983 is the infomation reliable

 

题目:hdu 1534

这道题目看懂FAS, FAF等字符串的意思之后就比较明显了。如果以时间为所求变量的角度来看问题,则题目意思是给你四种不等式FAS, FAF, SAF, SAS要你求出所有时间的最小值,那么假设a的开始时间为Xa,时长为Wa,同理Xb,Wb,那么可以构造出四个不等式:

  • FAS:Xa + Wa >= Xb  转换为查分约束系统 ==> Xa - Xb >= -Wa
  • FAF:Xa + Wa >= Xb + Wb                             ==> Xa - Xb >= Wb - Wa
  • SAF:Xa >= Xb + Wb                                      ==> Xa - Xb >= Wb
  • SAS:Xa >= Xb                                                ==> Xa - Xb >= 0

由于求的是最小值,所以构造的是>=类型的不等式,将Xa,Xb看作到“源点”的距离dis,转换为求解最长路得到最小值。由于这里连的边不一定能够使得图能够连通,所以构造“超级源点”来将图连通。再来分析下spfa中的无解终止次数,由于我们自己增加了一个超级源点,所以总的点数为n+1,所以存在解最多遍历n次

// 变量的命名重复啦啦, char s[] 和 int s[] ...
// 以后稍微小心点!
// hdu 1534
// solved
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#define Inf 0x3f3f3f3f
using namespace std;
const int N = 2000;
struct Edge {
    int v, w;
    Edge(int a=0, int b=0): v(a), w(b) {}
};
vector<Edge> g[N];
int n;
int w[N], d[N], cnt[N];
bool inq[N];

inline void __ini__() {
    for(int i=0; i<=n; ++i)
        vector<Edge>().swap(g[i]),
        d[i] = -Inf;
    memset(cnt, 0, sizeof(cnt));
    memset(inq, false, sizeof(inq));        
    return;
}

inline void add_edge(int from, int to, int w) {
    g[from].push_back(Edge(to, w));
    return;
}

bool spfa() {
    queue<int> q; while(q.size()) q.pop();
    q.push(0);
    inq[0] = true, d[0] = 0;
    cnt[0] = 1;
    while(q.size()) {
        int u = q.front(); q.pop();
        inq[u] = false;
        for(size_t i=0; i<g[u].size(); ++i) {
            int v = g[u][i].v,
                w = g[u][i].w;
            if(d[v] < d[u] + w) {
                d[v] = d[u] + w;
                if(!inq[v]) {
                    ++cnt[v];
                    if(cnt[v] > n) return false; // n+1个点最多遍历n次
                    q.push(v), inq[v] = true;
                }
            }
        }
    }return true;
}

int main() {
    int iter = 0;
    while(~scanf("%d", &n) && n) {
        __ini__();
        for(int i=1; i<=n; ++i) {
            scanf("%d", w+i);
        }
        char s[3];
        while(~scanf("%s", s) && s[0] != '#') {
            int a, b;
            scanf("%d %d", &a, &b);
            if(s[0] == 'F' && s[2] == 'S') // fas
                add_edge(b, a, -w[a]);
            else if(s[0] == 'F' && s[2] == 'F') // faf
                add_edge(b, a, w[b]-w[a]);
            else if(s[0] == 'S' && s[2] == 'F') // saf
                add_edge(b, a, w[b]);
            else add_edge(b, a, 0); // sas
        }
        for(int i=1; i<=n; ++i) {
            add_edge(0, i, 0); // 所有起始>=0
        }

        iter += 1;
        printf("Case %d:\n", iter);
        if(spfa()) {
            for(int i=1; i<=n; ++i) {
                printf("%d %d\n", i, d[i]);
            }
        }else puts("impossible");
        puts("");
    }
    return 0;
}
view code

 

题目:Cashier Employment

这道题算是比较难的了。题目大意:给出24个时间点所需的人手和N个应聘人的起始工作时间(工作时长为连续8小时),计算最少可以应聘多少人能够满足每个时间点的人手需求。

 

我们的已知条件:need[] 每个时间点所需要的人  app[]每个时间点应聘工作的人数。

目标:24小时里各时间点实际雇佣的人的总和。

 

我们设work[i]为在i时刻受聘的人,则

  • work[i] + work[i-1] + ... + work[i-7] >= need[i],
  • app[i] >= work[i], 
  • work[i] >=0                      --请自行尝试转换为差分约束系统吧~

又出现了典型的求和式,利用前缀和转换为查分约束系统。这里提一下第一条式子,在i<8的情况下,dis[i] - dis[i+16] >= need[i] - dis[24],其中有三个变量,不满足差分约束的规则。但观察到每条式子都是dis[24]且dis[24]就是我们的答案,所以二分枚举dis[24]的值将其转化为常量就可以进行差分约束的求解。要注意枚举dis[24]的值将其看作常量实际上就相当于用一个变量(暂且叫ans吧)ans来替代dis[24],所以ans实际上是缺少差分系统中的约束的,所以要增加一条式子:dis[24] >= ans。

// cashier employment
// 较难的差分 hdu 1529
// 关键--找到准约束的量,注意是对未知的量约束
// 同时涉及到了二分查找,查找符合的最小值(查找的有序区间0--n)
// 由原式子 .. s[24](ans) - s[16] + s[i] >= r[i] 
// 可知ans的可行区域是向上开的, 所以二分查找是找到符合条件的就往下找,未找到则往上找
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define Inf 0x3f3f3f3f
using namespace std;
const int N = 1000+4;
struct Edge {
    int to, w, nxt;
    Edge(int a=0, int b=0, int c=0): to(a), w(b), nxt(c) {}
}e[N];
int hd[N], cnte, ans;
int R[N], T[N], dis[N], cn[N];
bool inq[N];
inline void add_edge(const int& from, const int& to, const int& w) {
    ++cnte;
    e[cnte] = Edge(to, w, hd[from]);
    hd[from] = cnte;    return;
}

inline void __ini__() {
    for(int i=0; i<=50; ++i) {
        dis[i] = -Inf, inq[i] = false;
        hd[i] = cn[i] = 0;
    }cnte = 0;    return;
}
inline void new_g(const int& tmp) { // 重新建边
    __ini__();
    for(int i=1; i<=24; ++i) {
        add_edge(i, i-1, -T[i]), add_edge(i-1, i, 0);
        if(i >= 8) add_edge(i-8, i, R[i]);
        else add_edge(i+16, i, R[i]-tmp);
    }add_edge(0, 24, tmp);
    return;
}

bool spfa(const int& s) { // 找最长路
    queue<int> q;    while(q.size()) q.pop();
    q.push(s), inq[s] = true;
    dis[s] = 0, cn[s] = 1;
    while(q.size()) {
        int u = q.front();
        q.pop(), inq[u] = false;
        for(int i=hd[u]; i; i=e[i].nxt) {
            int v = e[i].to;
            if(dis[v] < dis[u] + e[i].w) {
                dis[v] = dis[u] + e[i].w;
                if(!inq[v]) {
                    if(++cn[v] > 24) return false; // 一共25个点, 最多24次
                    inq[v] = true, q.push(v);
                }
            }
        } 
    }return dis[24] >= 0;
}

bool bin_search(int l, int r) { // 二分枚举答案
    ans = -1;
    while(l <= r) {
        int mid = (l+r) >> 1;
        new_g(mid);
        if(spfa(1)) {
            ans = mid;
            r = mid-1; // 查找最小
        }else l = mid+1;
    }return ans >= 0;
}

int main() {
    int t;    scanf("%d", &t);
    while(t--) {
        memset(T, 0, sizeof(T));
        for(int i=1; i<=24; ++i) {
            scanf("%d", R+i); // i时刻至少需要的人
        }
        int n;    scanf("%d", &n);
        for(int i=0; i<n; ++i) {
            int tmp;    scanf("%d", &tmp);
            T[tmp+1] += 1; // tmp时刻应聘的人, 注意时间全部+1
        }
        if(bin_search(0, n)) printf("%d\n", ans);
        else puts("No Solution");
    }
    return 0;
}
View Code

 

 

 

 

 

转载于:https://www.cnblogs.com/GorgeousBankarian/p/11558349.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图论--差分约束 的相关文章

  • Git GUI,Git Bash,Git CMD之间的区别

    Git CMD就像使用git命令的常规Windows命令提示一样 它允许您通过命令行使用所有Git功能 如果您已熟悉Windows cmd并且只能在Windows上工作 则非常有用 Git Bash在Windows上模拟bash环境 它允许
  • Mysql JDBC和事务(细致而易懂)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 安装环境 一 JDBC 二 preparedstament和statement的区别 三 批量处理 四 事务提交控制 最后 安装环境 1 jdk17 2 MySQL8
  • Qt自定义类使用自定义含参信号与槽

    最近在自定义类中使用了信号来连接到MainWindow类中的槽函数 具体操作如下 要点一 继承QObject 在头文件中初始化自定义类MyThread1 这里由于继承的QThread已经继承了QObject 无需嵌套继承 故不必public
  • Flutter 凸起效果底部导航栏一

    大多app中都会带有底部导航栏 系统默认自带的导航条不够新颖 今天我们改造一下导航条 将中间的按钮起到凸起的效果 特别有的app 中间常用扫一扫功能 Flutter为我们提供了一个控件BottomNavigationBar 结合Bottom
  • Linux——(第九章)磁盘分区、挂载

    目录 一 Linux分区概述 1 原理介绍 2 硬盘说明 二 查看磁盘和分区 1 du查看文件和目录占用的磁盘空间 2 df查看磁盘空间使用情况 3 lsblk查看设备挂载情况 4 mount unmount 挂载 卸载 5 fdisk 分
  • 解决VS Code开发Python3语言自动补全功能

    https www cnblogs com yuer20180726 p 10942372 html 1 打开设置界面 2 使用快捷键组合 Ctrl Shift p 入setting 选中首选项的user setting模式设置界面 在打开
  • 华为OD机试真题 Java 实现【光伏场地建设规划】【2023Q1 100分】

    一 题目描述 祖国西北部有一片大片荒地 其中零星的分布着一些湖泊 保护区 矿区 整体上常年光照良好 但是也有一些地区光照不太好 某电力公司希望在这里建设多个光伏电站 生产清洁能源 对每平方公里的土地进行了发电评估 其中不能建设的区域发电量为
  • 求字符串最长公共前缀

    第一种方法 for循环第一个字符串 然后再for循环除了第一个字符串以外的其它字符串 比较其它字符串是否以某个字符串开头 从而找到公共前缀 function getCommonStr arr if arr Array isArray arr
  • 面向对象编程(概念)

    面向对象编程 概念 面向过程 面向对象 面向过程思想 1 步骤清晰简单 第一步做什么 第二步做什么 2 面对过程是和处理一些较为简单的题目 面向对象思想 1 物以类聚 分类的思维模式 思考问题首先会解决问题需要哪些分类 然后对这些分类进行单
  • 解决ImportError: No module named zlib问题

    今天在创建django工程时 报了这个错 其实前几天也遇见过当时是在装一个setuptools时 报了这个错误zlib not available按照网上的方法 装好之后重新编译自己的Python 结果没有反应 还是报错 zlib模块是用来
  • java elasticsearch_Java操作ElasticSearch

    java客户端连接到ElasticSearch服务器 创建maven工程 添加坐标 最好跟服务器elasticsearch一致 org elasticsearch client transport 6 2 4 net sf json lib
  • type和interface的区别

    type和interface都可以用来表示接口 但实际用的时候会有写差异 1 type和interface的相同点 都是用来定义对象或函数的形状 interface example name string age number interf
  • 修复Chrome浏览器下载速度慢的问题

    前言 本人使用Mac端进行操作 Win端操作大体基本相同 差别不大 放心食用 特色 操作简单 配套软件链接齐全 传送门 链接 https pan baidu com s 1vcCcPlHaUQmYrQldVM8UVQ pwd 0000 提取
  • 2023第十四届蓝桥杯 C/C++大学生A组省赛 满分题解

    写在前面 以下代码 目前均可通过民间OJ数据 dotcpp New Online Judge 两个OJ题目互补 能构成全集 可以到对应链接下搜题提交 感谢OJ对题目的支持 如果发现任何问题 包含但不限于算法思路出错 OJ数据弱算法实际超时
  • linux固件以及与驱动的区别

    硬件越来越复杂 硬件的许多功能使用了程序实现 与直接硬件实现相比 固件拥有处理复杂事物的灵活性和便于升级 维护等优点 固件 firmware 就是这样的一段在设备硬件自身中执行的程序 通过固件标准驱动程序才能实现特定机器的操作 如 光驱 刻
  • Android Studio 真机调试与虚拟机

    虚拟机调试 1 创建一个简单的hello world例子 支持C 2 SDK manager 根据个人需要选择安装 勾选并点击右下角apply即会自动安装 3 AVD manager 4 运行android程序 弹出选择设备框时有可能无法查
  • python字典中键不允许重复_Python 字典中的“键”不允许重复。 (1.0分)_学小易找答案...

    填空题 已知 x 1 2 3 那么表达式 not set x 100 set x 的值为 1 0分 判断题 列表可以作为字典的 键 1 0分 填空题 已知 x 为非空列表 那么表达式 x reverse list reversed x 的值
  • python自动化课程笔记(十三)单例模型、代码性能、抛出异常

    单例模型 重要 class Person object instance None is first True def new cls args kwargs 如果类属性 instance的值为None 创建一个对象 并赋值为这个对象的引用
  • 一个双非计算机学生的长远规划(考研篇)

    一个双非计算机学生的长远规划 考研篇 本文于2022 5 14 第一次更新 本文于2022 12 07 第二次更新 第二次更新内容 作者此次更新已经是大三了 经历了三段实习 马上去第三家 实习 发现学历真的是让我们实现阶级跨越的鸿沟 没有更
  • 【YAML 学习】

    YAML是 JSON 的超集 因此是一种用于指定分层配置数据的便捷格式 YAML YAML Ain t Markup Language 的递归首字母缩写词 是一种数据序列化语言 旨在实现人性化 并与现代编程语言一起处理常见的日常任务 YAM

随机推荐

  • vue 使用axios 出现跨域请求

    设置一个代理服务器 使用proxyTable配置地方 1 项目文件目录的conf文件夹下的index js build dev 都可设置为一致 dev env require dev env port 80 assetsSubDirecto
  • 实用小工具(数据集转换...)

    xml2yolo py import xml etree ElementTree as ET import pickle import os from os import listdir getcwd from os path import
  • 精选腾讯技术干货200+篇,云加社区全年沙龙PPT免费下载!

    2019年已经过去 小编为大家整理了这一年以来云加社区发布的 200多篇腾讯干货 点击文章标题即可跳转到原文 请速速收藏哦 看腾讯技术 腾讯成本优化黑科技 整机CPU利用率最高提升至90 腾讯科技升级1000天 团战 登月与烟囱革命 看一看
  • @RestController注解作用

    作用 Controller和 ResponseBody的集合 Controller Controller标识的类 该类代表控制器类 控制层 表现层 这里控制层里面的每个方法 都可以去调用 Service标识的类 业务逻辑层 Response
  • java锁杂谈

    关于java锁 内容蛮多的 这篇文章只谈一部分见解 所以取名为杂谈 没有大纲 等后面锁的体系建立起来后再整理一下 那么开始吧 Java 锁有哪些 各种各样 网传15种有余 这些锁的底层大多是AQS实现的 比如 ReentrantLock可重
  • 搜集Shader一些参数(为自己)

    Shader ConfigurableShaders Rendering Properties Header Stencil Stencil Stencil ID 0 255 Float 0 ReadMask ReadMask 0 255
  • PLC控制运料小车往返运动

    实验要求 1 实验控制电路应该具有控制回路的总控制 其功能是启动和停止控制电路 它可以使小车停站的位置行程开关处于压合的位置 脱离延迟控制往返时为启动状态 及零压保护电路功能 2 小车沿轨道自动往返运动时 小车在行程内的任何位置时都可以起动
  • c++实现创建一个cocos2d-x的场景类

    文件 http pan baidu com s 1ntlu14H createVSClass cpp 定义控制台应用程序的入口点 include stdafx h include
  • RocketMQ消费者端消息列队六种负载均衡算法分析

    在RocketMQ启动的时候会启动负载均衡线程 过程如下 DefaultMQPullConsumerImpl start mQClientFactory start 上面点进去 gt MQClientInstance start rebal
  • 区间调度1.找到移除区间的最小数量

    求出最多有几个互不相交的区间 则做法是按end升序排序 选择一个结束最早的x 然后把区间中与它冲突的全部删除 别的区间的start要大于这个区间的end 接着重复步骤直到堆中没有区间 不用堆只用数组的话可以用一个for循环遍历整个数组 记录
  • 火猴之arc以及gesturemanager的应用(firemonkey)

    效果 目标 1 向左滑动 环形进度条从0 100 2 向右滑动 环形进度条从100 0 思路 1 放置3个arc组件 rotationangle设置为270 stroke的thickness设为30 2 放置gesturemanager组件
  • [Windows] 在磁盘管理中,脱机选项不可选,无法将磁盘脱机

    1 在磁盘管理中遇到无法脱机磁盘的情况 脱机选项不可选 可能是由于将虚拟内存设置到该磁盘上导致的 2 进入电脑属性 gt 高级系统设置 gt 高级 gt 性能设置 gt 高级 gt 更改 3 取消在该磁盘上设置的虚拟内存 4 再进入磁盘管理
  • Qt 智能指针

    C 11 标准中的提供的智能指针 在 Qt 中也提供了类似的替代功能 并且比 C 11 标准中提供的功能还要强大 所以如果我们使用 Qt 作为基础库 Qt 智能指针包括 QSharedPointer QScopedPointer QScop
  • 【react】js表达式和js语句(代码)的区别

    何为表达式 一定注意区分 js语句 代码 与 js表达式 1 表达式 一个表达式会产生一个值 可以放在任何一个需要值的地方 下面这些都是表达式 1 a 2 a b 3 demo 1 4 arr map 5 function test 2 语
  • Tomcat载入配置

    错误出现原因 未配置环境变量
  • (N1盒子) Openwrt 下 docker 容器访问互联网故障排除

    环境 硬件 N1盒子 Openwrt版本 openwrt flippy 60 o 情况描述 先是跑了个运行php的docker容器 日志里报错信息为 cURL error 7 Failed to connect to 域名 port 端口号
  • 《基于Linux物联网综合项目》常见问题汇总fae

    关于该课程说明 1 本课程目标 通过web浏览器访问服务器 实现登录 注册 数据库操作 远程操控硬件 采集环境信息 远程监控 拍照 图片显示等功能 将单片机 linux html 摄像头 数据库等知识点融入到一个项目中 2 什么群体适合学习
  • 自然语言处理卷积神经网络c 代码,卷积神经网络CNN 在自然语言处理中的应用

    序言 CNN在文本分类中取得了不俗的结果 而运用在这里的卷积可以分为1d 2d甚至是3d的 我们知道 CNN一般用来做图像 图像是可以通过预处理 将每幅照片都处理成一样的size的 也就是height和width具有一样的像素值 然后用一个
  • SPRINGBOOT学习记录

    SPRINGBOOT 1 入门 1 1 springBoot具体流程 1yaml 配置文件 2 自动装配 3集成web框架 4 集成数据库 5分布式开发 Dubbo rpc zookeeper 6 swagger 接口文档 7 任务调度 8
  • 图论--差分约束

    小引入 如果一个系统由n个变量和m个约束条件组成 形成如xi xj lt k ij 1 n 的不等式 则称其为查分约束系统 写成一个矩阵形式的不等式组的话则系数有且仅有一个1和一个 1 解这种不等式组为何会与图论扯上关系呢 在我们求解最短路