简单图论练习题OJ

电子科大2020图论考题回忆 电子科大2020图论考题回忆 在8.27号考的,凭着回忆梳理一下,题型就是填空,选择和大题 一.填空题 3正则图偶图的补图有16条边,则此图的顶点数:__ ps: 首先是握手定理:3n=2m 首先是握手定理:3n=2m 首先是握手定理:3n=2m 然后是补图和此图边数合是完全图的边数:m+16=n∗(n−1)2 然后是补图和此图边数合是完全图的边数:m+16=\frac{n*(n-1)}{2} 然后是补图和此图边数合是完全图的边数:m+16=2n∗(n−1)​ 一个图是极大平面图,给了顶点数n,问有 阅读详情

问题 A: 最短路径问题

时间限制: 1 Sec  内存限制: 128 MB

题目描述

给定有向图 G,以及原点 S,请求出原点到所有点的最短路径。 

输入

输入文件的第一行包含两个整数 n, m,代表图中的顶点数和边数。

接下来 m 行,每行三个整数 u, v, w,代表一条从 u 指向 v,权值 为 w 的边。

最后一行为一个整数 S。 

输出

输出 n 个整数,依次代表 S 到 1, 2, . . . , n 的最短距离, S 到自己的距 离定义为 0,对于无法从 S 到达的点输出 -1。整数用一个空格隔开。 

样例输入

3 3 1 2 1 2 3 2 1 3 1 1

样例输出

0 1 1

提示

对于100%的数据,n ≤ 100000,m ≤ 800000,0 ≤ w ≤ 1000,请使用 dijkstra 算法。 

Dijkstra 算法的每一次迭代分为两个步骤:选出当前距离最小的点和 从该点更新其他点的当前最小距离。很明显,第一步可以利用堆来选择, 时间复杂度降至 log(n),而第二步则可能会更改堆中的某些点的权值,这 时有两种处理方法,第一是额外记录每个点在堆中的位置并维护;第二是 直接将一个新结点插入堆中,因为新结点比老结点的权值更小一定在老结 点之前到达堆顶,所以这样做没有问题,当以后碰到堆顶结点为最短距离 已确定的结点,简单地将其丢弃即可,时间复杂度仅上升一个常数,是一 个不错的偷懒方法。 

 

dijkstra+堆

#include<cstdio>
#include<queue>
using namespace std;
int read()
{
    int ret=0; char ch=getchar();
    while(ch<'0'||ch>'9') ch=getchar();
    while(ch>='0'&&ch<='9')
        ret=(ret<<1)+(ret<<3)+ch-'0',ch=getchar();
    return ret; 
}
  
const int N=1e6+5; 
int n,m,d[N],s;
bool fl[N];
int cnt,he[N],to[N],nxt[N],w[N];
  
inline void add(int u,int v,int k)
{
    to[++cnt]=v,nxt[cnt]=he[u],he[u]=cnt,w[cnt]=k; 
}
  
struct NA{
    int id,x;
};
bool operator >(NA i,NA j)
{
    return i.x>j.x;
} 
priority_queue<NA,vector<NA>,greater<NA> >q;
  
int main() 
{
    n=read(),m=read();
    for(int i=1;i<=m;i++)
    {
        int u=read(),v=read(),k=read();
        add(u,v,k); 
    } 
    s=read();
    for(int i=1;i<=n;i++) d[i]=2e9;
    q.push((NA){s,d[s]=0});
    for(int i=1;i<=n;i++)
    {
        while(!q.empty()&&fl[q.top().id]) q.pop();
        if(q.empty()) break;
        int u=q.top().id; fl[u]=1;
        q.pop();
        for(int e=he[u];e;e=nxt[e])
        {
            int v=to[e];
            if(!fl[v]&&d[v]>d[u]+w[e]) 
                q.push((NA){v,d[v]=d[u]+w[e]});
        }
    }
    for(int i=1;i<n;i++)
        if(d[i]!=2e9) printf("%d ",d[i]);
            else printf("-1 ");
    if(d[n]!=2e9) printf("%d",d[n]);
        else printf("-1");
    return 0;
}

问题 B: 最短路径问题(二)

时间限制: 1 Sec  内存限制: 128 MB

题目描述

给定有向图 G,以及原点 S,请求出原点到所有点的最短路径。 

 

输入

输入文件的第一行包含两个整数 n, m,代表图中的顶点数和边数。

接下来 m 行,每行三个整数 u, v, w,代表一条从 u 指向 v,权值 为 w 的边。 

最后一行为一个整数 S。 

 

输出

若图中存在负权环,则输出一行“ERROR”。

否则输出 n 个整数,依次代表 S 到 1, 2, . . . , n 的最短距离, S 到自己 的距离定义为 0,对于无法从 S 到达的点输出 -1。整数用一个空格隔开。 

 

样例输入

样例输出

提示
 

对于所有数据, n ≤ 1000, m ≤ 100000, −1000 ≤ w ≤ 1000。 

 

 

SPFA模拟题

#include<cstdio>
using namespace std;

const int N=4e6+5;
int n,m,s,l,r,q[N],dis[N],num[N];
bool fl[N];
int cnt,to[N],nxt[N],he[N],w[N];

inline void add(int u,int v,int k)
{
	to[++cnt]=v,nxt[cnt]=he[u],
	w[cnt]=k,he[u]=cnt;
}

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int u,v,k;
		scanf("%d%d%d",&u,&v,&k);
		add(u,v,k);
	}
	scanf("%d",&s);
	for(int i=1;i<=n;i++) dis[i]=1e9;
	int l=1,r=1;
	q[1]=s;
	dis[s]=0;
	fl[s]=1;
	num[s]=1;
	while(l<=r)
	{
		int u=q[l]; l++;
		fl[u]=0;
		for(int e=he[u];e;e=nxt[e])
		{
			int v=to[e];
			if(dis[v]>dis[u]+w[e])
			{
				dis[v]=dis[u]+w[e];
				if(!fl[v])
				{
					fl[v]=1;
					num[v]++;
					if(num[v]==n) 
					{
						puts("ERROR"); 
						return 0;
					}
					q[++r]=v;
				}
			}
		}
	}
	for(int i=1;i<=n;i++)
		printf("%d%c",(dis[i]==1e9)?-1:dis[i],i==n?'\n':' ');
	return 0;
}

 

 

问题 C: 最小圈

时间限制: 1 Sec  内存限制: 128 MB

题目描述

给定一个带权无向图 G = (V, E),请求出其中的最小圈。圈定义为 顶点序列 (v1,v2,...,vp,vp+1),满足 vi = vj(i = j), v1 = vp+1,且边 (vi, vi+1) ∈ E。 

输入

第一行为两个整数 n,m,代表图的顶点数和边数。

接下来 m 行,每行三个整数 u,v,w,描述一条连接 u 和 v,权值为 w 的边。 

输出

输出一个整数,即图中的最小圈。数据保证图中至少存在一个圈。 

样例输入

6 7 1 2 1 2 4 2 4 6 3 5 6 4 3 5 5 3 4 2 1 3 6

样例输出

11

提示

对于30%的数据n ≤ 30

对于 60% 的数据, n ≤ 100

对于 100% 的数据, n ≤ 400, w ≤ 100000

利用 Floyd 算法,求得环中的点最大编号为 1, 2, . . . , n 时的最小环。 

 

模板题

#include<cstdio>
#include<iostream>
using namespace std;
int read()
{
    int ret=0; char ch=getchar(); bool f=0;
    while(ch<'0'||ch>'9') 
    {
        if(ch=='-') f=1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
        ret=(ret<<1)+(ret<<3)+ch-'0',ch=getchar();
    return f?-ret:ret;
}
  
const int N=405;
int n,m,f[N][N],a[N][N][2],ans;
  
int main()
{
    n=read(),m=read();
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++) a[i][j][0]=a[i][j][1]=f[i][j]=6e8;
    for(int i=1;i<=n;i++) f[i][i]=0;
    ans=2e9;
    for(int i=1;i<=m;i++)
    {
        int u=read(),v=read(),w=read();
        f[u][v]=f[v][u]=min(f[u][v],w);
        if(a[u][v][0]!=6e8) a[u][v][0]=a[v][u][0]=w;
            else if(a[u][v][1]!=6e8) a[u][v][1]=a[v][u][1]=w;
                else
                {
                    if(a[u][v][0]>w) 
                        a[u][v][1]=a[v][u][1]=a[u][v][1],a[u][v][0]=a[v][u][0]=w;
                    else a[u][v][1]=a[v][u][1]=min(a[u][v][1],w);
                }
        ans=min(ans,a[u][v][0]+a[u][v][1]);
    } 
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            {
                if(i!=j&&f[i][j]!=6e8&&a[i][k][0]!=6e8&&a[j][k][0]!=6e8) ans=min(ans,f[i][j]+a[i][k][0]+a[k][j][0]);
                f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
            }
    printf("%d",ans);
    return 0;
} 

 

 

问题 D: 公路修建

时间限制: 1 Sec  内存限制: 128 MB

题目描述

有 n 个城市需要用道路连接起来,现在有 m 条道路的修建方案,每 个方案的实施可以带来一定的利润,你的任务是确定实施的方案,使得任 意两个城市都连通,并且获得的利润最大。 

输入

第一行为两个整数 n, m,含义如题中所述。n ≤ 10000, m ≤ 200000。 

接下来有 m 行,每行三个整数 u, v, w,代表在 u 和 v 之间修建一 条道路可以获得 w 的利润。注意,修建一条道路可能会导致亏损,这时我 们用负的利润表示。 

 

输出

输出一行,代表能够获得的最大利益。 

 

样例输入

3 3 1 2 -1 2 3 -2 1 3 -1

样例输出

-2

 

>=0的边全部加上,其余的最大生成树处理

#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
int read()
{
    int ret=0; char ch=getchar(); bool f=0;
    while(ch<'0'||ch>'9') 
    {
        if(ch=='-') f=1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
        ret=(ret<<1)+(ret<<3)+ch-'0',ch=getchar();
    return f?-ret:ret;
}
  
const int N=1e6+5;
int n,m,ff[N];
ll ans;
struct NA{
    int u,v,w;
}e[N];
bool cmp(NA i,NA j)
{
    return i.w>j.w;
}
  
int find(int x)
{
    return x==ff[x]?x:ff[x]=find(ff[x]);
}
int main()
{
    n=read(),m=read();
    for(int i=1;i<=m;i++)
        e[i].u=read(),e[i].v=read(),e[i].w=read();
    sort(e+1,e+m+1,cmp);
    for(int i=1;i<=n;i++) ff[i]=i;
    for(int i=1;i<=m;i++)
    if(e[i].w>=0)
    {
        int u=e[i].u,v=e[i].v;
        int f1=find(u),f2=find(v);
        ans+=e[i].w,ff[f1]=f2;
    } else
    {
        int u=e[i].u,v=e[i].v;
        int f1=find(u),f2=find(v);
        if(ff[f1]!=f2) ans+=e[i].w,ff[f1]=f2;   
    }
    printf("%lld",ans);
    return 0;
}

 

问题 E: 刻录光盘

时间限制: 1 Sec  内存限制: 128 MB

题目描述

在 JSOI2005 夏令营快要结束的时候,很多营员提出来要把整个夏令 营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习。组委会 觉得这个主意不错!可是组委会一时没有足够的空光盘,没法保证每个人 都能拿到刻录上资料的光盘,又来不及去买了,怎么办呢?!

组委会把这个难题交给了 LHC,LHC 分析了一下所有营员的地域关 系,发现有些营员是一个城市的,其实他们只需要一张就可以了,因为一 个人拿到光盘后,其他人可以带着 U 盘之类的东西去拷贝啊!

可是,LHC 调查后发现,由于种种原因,有些营员并不是那么的合 作,他们愿意某一些人到他那儿拷贝资料,当然也可能不愿意让另外一些 人到他那儿拷贝资料,这与我们 JSOI 宣扬的团队合作精神格格不入!

现在假设总共有 N 个营员(2<=N<=2000),每个营员的编号为 1 N。 LHC 给每个人发了一张调查表,让每个营员填上自己愿意让哪些人到他那 儿拷贝资料。当然,如果 A 愿意把资料拷贝给 B,而 B 又愿意把资料拷 贝给 C,则一旦 A 获得了资料,则 B,C 都会获得资料。

现在,请你编写一个程序,根据回收上来的调查表,帮助 LHC 计算 出组委会至少要刻录多少张光盘,才能保证所有营员回去后都能得到夏令 营资料? 

 

输入

先是一个数 N,接下来的 N 行,分别表示各个营员愿意把自己获得的 资料拷贝给其他哪些营员。即输入数据的第 i+1 行表示第 i 个营员愿意把 资料拷贝给那些营员的编号,以一个 0 结束。如果一个营员不愿意拷贝资 料给任何人,则相应的行只有 1 个 0,一行中的若干数之间用一个空格隔 开。 

输出

一个正整数,表示最少要刻录的光盘数。 

样例输入

5 2 4 3 0 4 5 0 0 0 1 0

样例输出

1

提示

 

 

tarjan缩点后统计度为0的结点

#include<cstdio>
#include<iostream>
using namespace std;
int read()
{
    int ret=0; char ch=getchar();
    while(ch<'0'||ch>'9') ch=getchar();
    while(ch>='0'&&ch<='9')
        ret=(ret<<1)+(ret<<3)+ch-'0',ch=getchar();
    return ret;
}
  
const int N=2005,M=4000005;
int n,m,d[N],ans;
int cnt,he[M],to[M],nxt[M];
struct NA{
    int u,v;
}e[M];
int sgn,dfn[N],low[N],top,st[N],col,co[N];
  
inline void add(int u,int v)
{
    to[++cnt]=v,nxt[cnt]=he[u],he[u]=cnt;
}
  
void tar(int u)
{
    dfn[u]=low[u]=++sgn;
    st[++top]=u;
    for(int e=he[u];e;e=nxt[e])
    {
        int v=to[e];
        if(!dfn[v]) 
            tar(v),low[u]=min(low[u],low[v]);
        else if(!co[v]) 
            low[u]=min(low[u],dfn[v]);
    }
    if(low[u]==dfn[u])
    {
        co[u]=++col;
        while(top&&st[top]!=u)
            co[st[top--]]=col;
        top--;
    }
}
  
int main()
{
    n=read();
    for(int i=1;i<=n;i++)
    {
        int x=read();
        while(x)
            e[++m].u=i,e[m].v=x,
            add(i,x),x=read();
    }
    for(int i=1;i<=n;i++)
        if(!dfn[i]) tar(i);
    for(int i=1;i<=m;i++)
        if(co[e[i].u]!=co[e[i].v]) d[co[e[i].v]]++;
    ans=0; 
    for(int i=1;i<=col;i++)
        if(!d[i]) ans++;
    printf("%d",ans);
    return 0;
}

 

问题 F: 割点和桥

时间限制: 1 Sec  内存限制: 128 MB

题目描述

给定连通无向图 G,请求出 G 中的割点和桥的个数。 

 

输入

第一行两个整数 n,m,代表图的顶点数和边数。 接下来 m 行,每行两个整数 u, v,描述一条无向边。 N ≤ 50000, m ≤ 200000 

 

输出

输出两个整数,先输出割点的数量和再输出桥的数量,用一个空格隔 开。 

 

样例输入

4 5 1 2 1 2 2 3 2 3 3 4

样例输出

2 1

 

#include<cstdio>
#include<iostream>
using namespace std;
int read()
{
    int ret=0; char ch=getchar();
    while(ch<'0'||ch>'9') ch=getchar();
    while(ch>='0'&&ch<='9')
        ret=(ret<<1)+(ret<<3)+ch-'0',ch=getchar();
    return ret;
}
  
const int N=1e6+5;
int n,m,num[N],ans;
int cnt,he[N],to[N],nxt[N];
int sgn,low[N],dfn[N];
  
inline void add(int u,int v)
{
    to[++cnt]=v,nxt[cnt]=he[u],he[u]=cnt;
}
  
void tar1(int u,int r)
{
    low[u]=dfn[u]=++sgn;
    int ch=0;
    for(int e=he[u];e;e=nxt[e])
    {
        int v=to[e];
        if(!dfn[v]) 
        {
            tar1(v,r); low[u]=min(low[u],low[v]);
            if(u!=r&&low[v]>=dfn[u]) num[u]=1;
            if(u==r) ch++;
        }
        low[u]=min(low[u],dfn[v]);
    }
    if(u==r&&ch>=2) num[u]=1; 
}
  
void tar2(int fa,int u)
{
    low[u]=dfn[u]=++sgn;
    for(int e=he[u];e;e=nxt[e])
    {
        int v=to[e];
        if(v!=fa)
        {
            if(!dfn[v])
            {
                tar2(u,v); low[u]=min(low[u],low[v]);
                if(dfn[u]<low[v]) ans++; 
            }
            low[u]=min(low[u],dfn[v]);
        } else fa=0;
    }
}
int main()
{
    n=read(),m=read();
    for(int i=1;i<=m;i++)
    {
        int u=read(),v=read();
        add(u,v); add(v,u);
    }
    tar1(1,1);
    for(int i=1;i<=n;i++) 
        if(num[i]) ans++;
    printf("%d ",ans);
    sgn=ans=0; 
    for(int i=1;i<=n;i++)
        dfn[i]=low[i]=0;
    tar2(0,1);
    printf("%d",ans);
    return 0;
} 

 

ACM OJ 平台以及平台题目分类 OJ是Online Judge系统的简称,用来在线检测程序源代码的正确性。著名的OJ有RQNOJ、URAL等。国内著名的题库有北京大学题库、浙江大学题库等。国外的题库包括乌拉尔大学、瓦拉杜利德大学题库等。 简介:   Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序多种程序(如C、C++)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检 阅读详情

相关推荐

东华OJ复试动态规划与图论刷题实战指南

动态规划与图论是计算机算法设计的核心内容,广泛应用于路径优化、网络分析等场景。动态规划通过状态转移方程高效解决重叠子问题,典型如矩阵最小路径和问题;图论算法如Floyd-Warshall能快速处理节点可达性查询。在OJ刷题过程中,掌握这些算法的优化技巧(如障碍物处理、时空复杂度分析)能显著提升解题效率。本文以东华大学OJ高频考题为例,详解动态规划的矩阵路径优化和图论的传递闭包问题,帮助考生在复试中突破算法瓶颈。

weixin_31960565的博客 261

算法竞赛进阶指南:装满的油箱(Python)

有 N 个城市(编号0、1…N−1)和 MM 条道路,构成一张无向图。在每个城市里边都有一个加油站,不同的加油站的单位油价不一样。现在你需要回答不超过 100 个问题,在每个问题中,请计算出一架油箱容量为 C 的车子,从起点城市 S 开到终点城市 E 至少要花多少油钱?注意: 假定车子初始时油箱是空的。输入格式第一行包含两个整数 N 和 M。第二行包含 N 个整数,代表 N 个城市的单位油价,第 i 个数即为第 i 个城市的油价 pi。接下来 M 行,每行包括三个整数 u,v,d,表示城市 u 与城市 v

KS的博客 452

北航OJ-2014级第2次算法上机题解

北航OJ-2014级第2次算法上机题解

Lenz_Xu的博客 3803

寒假“最短路”题解

1、P1359 租用游艇 题目描述 长江游艇俱乐部在长江上设置了n个游艇出租站1,2,⋯,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站ii到游艇出租站j之间的租金为r(i,j)(1≤i<j≤n)。试设计一个算法,计算出从游艇出租站1到游艇出租站n所需的最少租金。 输入格式 第一行中有一个正整数n,表示有n个游艇出租站。接下来的n-1 行是一个半矩阵r(i,j)(1≤i<j≤n)。 输出格式 输出计算出的从游艇...

qq_63701383的博客 2187

哈工大OJ平台ACM解题实战报告合集

ACM国际大学生程序设计竞赛(ICPC)采用团队赛制,每队3人共用1台计算机,在5小时内解决8–13道算法题。评分规则以通过题目数(PC²规则)优先,其次按总用时排序,包含错误提交罚时(每次错误提交+20分钟)。题目类型涵盖模拟、数学、动态规划、图论等,要求选手具备快速建模与编码能力。状态的设计直接影响算法的可行性与性能。合理的状态抽象应具备以下特征:唯一性:每个状态对应唯一的标识符(可用于哈希表存储)最小化:仅包含必要信息,减少内存开销可扩展性。

weixin_42599558的博客 1424

rk3568 android 11.0 userdata 改为ext4格式

功能:解决设备在恢复出厂设置进行擦除数据的时候卡住问题。 1.修改userdata分区为ext4格式 diff --git a/device/rockchip/common/scripts/fstab_tools/fstab.in b/device/rockchip/common/scripts/fstab_tools/fstab.in index 583e75579d..036336835d 100755 --- a/device/rockchip/common/scripts/fstab_tools/

chgh1306的专栏 2576

图的删边操作

请编写程序对给定的有向图删除若干条边。有向图中包含n个顶点,编号为0至n-1。 输入格式: 输入第一行为两个正整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过1000。接下来e行表示每条边的信息,每行为3个非负整数a、b、c,其中a和b表示该边的端点编号,c表示权值。各边并非按端点编号顺序排列。随后一行为一个整数k,表示删除的边的条数,接下来k行,每行为2个非负整数a、b,表示待删除的边为a->b。保证删除的边一定在原图中。 输出格式: 输出执行删边操作之后的图。每行表示

qq_24624539的博客 3766

熵权法+TOPSIS完整教学:用Python评估大学科研实力(含雷达图绘制技巧)

本文提供了一套完整的熵权法与TOPSIS综合评价方法在Python中的实现教程,以高校科研实力评估为例,详细讲解了从数据预处理、客观权重计算、综合排序到结果可视化的全流程。重点介绍了如何利用Python进行数据清洗与转换,通过熵权法自动确定指标权重,并结合TOPSIS模型计算各院校与理想解的相对接近度进行排名。教程还包含了使用Matplotlib绘制专业雷达图的技巧,帮助读者直观呈现多维数据的对比分析结果,适用于各类多指标决策与绩效评估场景。

weixin_28520495的博客 416

用C语言实现对给定的有向图删除若干条边。有向图中包含n个顶点,编号为0至n-1。 输入格式: 输入第一行为两个正整数n和e,分别表示图的顶点数和边数,其中n不超过20000,e不超过1000。接下来...

C语言实现对给定的有向图删除若干条边的代码如下: #include<iostream> #include<vector> #include<unordered_map> using namespace std; const int N = 2e4 + 10; int n, e, k; unordered_map<int, vector<pair&lt...

weixin_35756637的博客 938

【智能体】零代码实战:Coze多智能体协作开发全流程解析

本文详细解析了Coze平台的多智能体协作开发全流程,从入门指南到实战技巧,帮助用户零代码构建高效AI团队。通过模块化设计和专业分工,多智能体系统能显著提升任务处理速度和准确率,适用于客服、内容创作、教育培训等多个场景。文章还提供了性能优化和常见问题解决方案,助力开发者快速掌握Multi-Agent技术。

weixin_29239279的博客 336

大疆OcuSync系统背后的黑科技:跳频扩频技术如何让你的无人机飞得更稳

本文深入解析了大疆OcuSync系统如何运用跳频扩频技术等先进无线通信方案,显著提升无人机在复杂环境下的飞行稳定性。系统通过跳频扩频与直接序列扩频技术协同工作,结合双频智能切换与多天线MIMO,有效对抗信号干扰与多径效应,确保控制指令与高清图传的可靠、低延迟传输,为用户带来更安心、更流畅的飞行体验。

ol7890123的博客 630

oj图论汇总

oj图论问题分类链接:https://blog.youkuaiyun.com/BrcLi/article/details/76380785 1213:https://mp.youkuaiyun.com/postedit/88978811 1272:https://mp.youkuaiyun.com/postedit/88978847 1325:https://mp.youkuaiyun.com/postedit/88978917 110...

那一夜见红的博客 374

单晶塑性abaqus-umat自学

单晶塑性abaqus-umat 摘要1. 简介2. 单晶弹塑性本构模型回顾2.1运动学 本文以翻译黄永刚老师的umat文章为主,这个颜色的为个人的理解。 摘要 包含单晶塑性的abaqus用户材料子程序。本文回顾有限元形式的单晶弹塑性和黏弹塑性,包含小变形理论,以及严格的有限变形和有限旋转理论。单晶的非弹性变形由于晶体滑移,假定遵从Schmid准则。提出多种多样的分切应力与剪切变形的自硬化和潜硬化关系,并且包含在子程序内。 1. 简介   有限元程序ABAQUS已经广泛应用在固体的变形与应力分析。除了自身大量

Niklas4088的博客 1万+

C++图论基础拓扑排序经典OJ题流食般投喂

在有向图上做dp其实是有一个难点的,就是五板斧中的填表顺序,在有向图上做dp不像在二维数组那样格式固定化,但是之前学习的拓扑排序其实就是量身定制适配于图的路径dp的填表顺序,解释一下:当x从队列中拿出来,那么x的dp表的位置已经跟新完毕,那么,依靠x推演的dp表格子就可以跟着跟新了。经验总结:图上的动态规划的状态转移方程的跟新是分批次的,不像是以前动态规划章节一次性更新完一个空。OJ题归属:图论基础【拓扑排序】OJ题归属:图论基础【拓扑排序】OJ题归属:图论基础【拓扑排序】OJ题名:最大食物链计数。

江屿风的博客 1061

部署模型:Libtorch使用笔记【Pytorch的C++版本】【把用Pytorch训练好的模型打包保存为.pt格式,使用Libtorch去加载.pt格式模型,在C++工程中去用就好了】

A : Libtorch是pytorch的C++版本,现在的很多大型项目都是用C++写的,想使用训练好的模型,需要通过caffe等方式去集成,比较麻烦。这里pytorch官方提出了Libtorch,我们就可以把pytorch训练好的模型,打包起来,直接在C++工程中去用就好了,相比较caffe等,非常方便!虽然对于许多需要动态性和易迭代性的场景来说,Python是一种合适且首选的语言,但在同样的情况下,Python的这些特性恰恰是不利的。生产环境是一个需要低延迟和有严格部署要求的领域,一般选择C++。

u013250861的博客 2950

Python与网络爬虫案例:电影评论抓取

接下来,我们就可以通过分析该页面中的HTML代码,来确定需要抓取的内容。在这段代码中,我们首先对每个评论div元素进行for循环,然后通过find方法获取class为'title'、'text'、'rating-other-user-rating'的元素,并将结果分别赋值给title、content和rating变量。在这段代码中,我们首先定义了目标网站的URL和headers信息,然后通过requests.get方法向目标网站发送了一个GET请求,并将返回的响应赋值给了response变量。

吃不胖. 1263

动态规划与图论:oj104-106算法题精解

动态规划是解决最优化问题的经典方法,通过将问题分解为子问题并存储中间结果来提高效率。背包问题作为动态规划的典型应用,常出现在算法竞赛和面试中,涉及01背包、完全背包等变种。图论中的最短路径算法如Dijkstra和Floyd广泛应用于网络路由、物流规划等场景。本文以oj104-106三道经典题目为例,详细解析背包问题的状态转移方程设计、图论算法的变形应用,以及并查集等数据结构的优化实现。通过分析动态规划的空间优化技巧、处理负权边的图算法选择,以及线段树的懒标记优化,帮助开发者掌握算法核心思想并提升解题效率。

Hi, Sun 415

基于GA-BP遗传算法优化神经网络的多输入多输出数据预测-Python代码实现

多输入多输出的GA-BP神经网络

2301_80449389的博客 2308

OJ题解汇总

。。。

nameofcsdn的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++图论基础多源最短路经典OJ题流食般投喂

dp 表中的 f[i][j] ,从 i 走到 j 的最短路存在,就表明 i 和 j 之间是通路,此时再将 k 结点当作桥梁,直接连接在 i、j 之间,那么此时 i、j 之间就形成了环。💡再识 Floyd 算法:不断加可以加的点,加一次点之后,就在已有点的基础上更新最短路,后面再加,再在目前已有点的基础上更新最短路......📌结果统计:题目例子:1——2——1——3,在 dp 表里面分别统计 1——2、2——1、1——3,结果之和。📌求解每类环的最小环。,此题给这环的叫法是,以 k 结点为最大值的环。

江屿风的博客 1473

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

九度OJ

1.1016 这是一道简单题,主要要考虑到,比如说108,8,2这种类似的情况,其中8被认为是08,所以最后两位相同,输出-1。 #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char a[20], b[20], *p, *q; int k, a1, b1, len1, len2, a2, b2; while (scanf("%s%s%d", a, b, &a...

Ftworld21的专栏 1151

Oj经典图论题目合集

=============================以下是最小生成树+并查集====================================== 【HDU】 *1213         How Many Tables            基础并查集★ *1272         小希的迷宫            基础并查集★ *1325&amp;&amp;poj1308     I...

盐可 1718

西电oj 1058 图论,贪心

西电oj 1058 图论,贪心 1058: 找子图 时间限制:1 Sec内存限制:128 MB提交:15解决:11[提交][状态][讨论版] 题目描述 现有一张无向图,有n个点m条边,每条边都有一个权值w,现要求从中找出一个子图,这个子图需满足以下特征:1.子图可以为空。2.若某条边的两个端点都在此子图中,则这条边在这个子图中。3.若某条边的两个端点都不在此子图中,...

weixin_30458043的博客 153

ACM 知名OJ平台及题目分类

各大OJ题目分类:https://blog.youkuaiyun.com/dl962454/article/details/73277396# 图论题目分类:https://blog.youkuaiyun.com/ling_du/article/details/47038249

Reaearcher-Du 5717

东华大学考研机试OJ训练:动态规划与图论实战

在线编程平台(OJ)是检验算法能力的重要工具,尤其在计算机专业考研复试中占据关键地位。动态规划和图论作为算法设计的核心领域,前者通过状态转移解决最优化问题,后者处理节点关系网络。在工程实践中,Dijkstra算法用于最短路径计算,背包问题则常见于资源分配场景。本文基于东华大学考研真题,详解字符串处理、图论算法和动态规划的典型解法,包含暴力解与最优解的对比分析,以及WA调试实录。特别适合需要短期提升OJ通过率的考生,通过每日3题的刻意练习建立算法到代码的肌肉记忆。

weixin_30608503的博客 357

东华OJ二刷指南:图论算法与复试编程优化

在线评测系统(OJ)是计算机编程能力训练的核心工具,通过自动化测试验证算法实现的正确性与效率。其技术原理基于沙箱执行环境和差分测试框架,在算法竞赛、编程考试等场景广泛应用。对于计算机考研复试而言,OJ刷题能有效提升数据结构应用能力和编码质量,特别是图论算法如Dijkstra、拓扑排序等高频考点。本文以A*算法优化和内存池技术为例,结合东华大学OJ真题,详解如何通过二刷实现从暴力解法到最优解的思维跃迁,帮助考生在复试编程环节建立条件反射式的解题能力。

weixin_34332905的博客 652
上一篇: Luogu P2657 [SCOI2009]windy数
下一篇: 魏传之长坂逆袭、蜀传之单刀赴会、吴传之火烧连营
YYHS_WSF
博客等级 码龄8年 8粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值