随笔分类 - OJ--URAL
摘要:1346简单dp 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 200010 9 int p[N],dp[N][2];10 int main()11 {12 int i,a,b;13 scanf("%d%d",&a,&b);14 for(i = 1 ; i p[i-1])21 {22 dp[i][0] = min(dp[i-1][1]+1,dp[i-1][0]);23 ...
阅读全文
摘要:刷个简单的DP缓缓心情1A 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 10010 9 vectorq[N];10 #define LL __int6411 #define INF 1e1012 LL dp[N][4];13 int o[N];14 struct node15 {16 int x,y,d;17 char s[10];18 }p[N];19 int main()20 {21 int i,j,n,m;...
阅读全文
摘要:经典DPn个鹰蛋 m层楼 刚开始是二分想法 不过当数小于二分的那个值 貌似没发判断dp[i][j] = min(dp[i][j],max(dp[i-1][k-1],dp[i][j-k]) 选择第k层扔 若碎了 就用剩下i-1个鹰蛋来测k-1层 若没碎 就用i个鹰蛋来测上面剩下的j-k层 这样是三重循环 1000^3势必TLE 不过以二分的思想来算 1000层最多只需要10个鹰蛋就可以测出来了 所以当n大于10的时候按10来算就OK了 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7..
阅读全文
摘要:1128写的dfs貌似不太对 bfs重写用bfs将图进行黑白染色 如果有超过一个与自己颜色相同的点 就把该点存入栈中 最后处理栈中的点 判断此点是否合法 不合法 取反 取反后再判断相邻点是否合法 不合法再存入栈中 直到栈为空 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define N 80010 10 vectored[N]; 11 int n; 12 int vis[N],d[N],f[N],g; 13 vo...
阅读全文
摘要:1641枚举 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 int w[110][110],o[110];10 int main()11 {12 int i,j,k,n,m;13 scanf("%d%d%d",&n,&k,&m);14 int t = 1;15 for(i = 1 ; i k)18 t = 1;19 o[i] = t;20 printf("%...
阅读全文
摘要:1160算是模版了 没什么限制 结束输出就行了 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 1010 9 #define M 1501010 struct node11 {12 int x,y,len;13 }p[M];14 int fa[N];15 int find(int x)16 {17 if(fa[x]!=x)18 fa[x] = find(fa[x]);19 return fa[x];20 }2...
阅读全文
摘要:1176给定一有向图 求其反图的欧拉回路 路径输反了 一直WA。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define N 5010010 int n,m;11 vectored[1010];12 int w[1010][1010],vis[1010];13 int pa[N],num,t;14 void dfs(int u)15 {16 int i;17 for(i = 0 ; i 1 ; i--)46 ...
阅读全文
摘要:1450水题 最长路 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 int n,m;10 vectored[510];11 int vis[510],dis[510],w[510][510];12 void spfa(int s,int e)13 {14 int i;15 queueq;16 q.push(s);17 vis[s] = 1;18 while(!q.empty())19 {2...
阅读全文
摘要:1651终于A了 看这题容易想到最短路 看到错的很多 还特意注意了好几处后来发现 必须按给出的顺序出边 想了想 这不就是BFS 然后就是各种细节 i->i+1ori->j(a[i]==a[j]) 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define N 1001010 #define INF 0xfffffff11 vectored[N];12 vector::iterator it;13 int vis[N*10],pa[N..
阅读全文
摘要:1218简答题对于当前点 判断每个点是否可达 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std;10 vectored[210];11 int w[210][210],vis[210];12 struct node13 {14 char s[35];15 int a,b,c;16 }p[210];17 int judge(int x,int y)18 {19 int a1 = p[x].a,a2 = ...
阅读全文
摘要:1888dfs找出连通块 块内构造数据 bfs找出最值 如果有多个连通块 那max就为49 可以起点不同 这样记得修改后面的数据写的老长了。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 vectored[55]; 10 int vis[55],gg,p,g,maxz,o[55],pp[55][55],q[55]; 11 int w[55],mm[55]; 12 void dfs(int u) 13 { 14 ...
阅读全文
摘要:1320简单并查集 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 int fa[1010],r[1010]; 9 int find(int x)10 {11 if(fa[x]!=x)12 fa[x] = find(fa[x]);13 return fa[x];14 }15 int main()16 {17 int i,u,v;18 int flag = 0;19 for(i = 1; i >u>>v)25 ...
阅读全文
摘要:1227题意木看懂 是可以停在路上 任何地方 水题一枚 以下条件之一满足就可以有环(并查集判)重边自己到自己的边最长边大于s(用flod改写下) 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define LL long long 9 int m,n,s,f[110];10 int w[110][110];11 int find(int x)12 {13 if(x!=f[x])14 f[x] = find(f[x]);15 retu...
阅读全文
摘要:1156求出每个联通块的黑白块数 然后再背包 二维的背包 要保证每个块都得取一个写的有些乱。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 vectored[110]; 9 int x,y,flag,g,f[110],o[110],n,q[110]; 10 int co[110],a[110],b[110],dp[110][110]; 11 int vis[110],p[110][110][2]; 12 void dfs(int u,in...
阅读全文
摘要:1137做过一样的 怎么又忘了 再一次搜超时不用回溯 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define N 1001010 int n,m;11 vectored[N];12 bool vis[N][N];13 int pa[100010],t;14 void dfs(int u)15 {16 int i;17 for(i = 0 ; i 1 ; i--)48 printf("%d ",pa[i])...
阅读全文
摘要:1934水题 RE了N久 后来发现是无向图 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define N 2000010 10 #define INF 0xfffffff 11 struct node 12 { 13 int u,v,next; 14 double w; 15 }ed[Nq; 42 dis[s] = 1; 43 p[s] = 1; 44 q.push(s);...
阅读全文
摘要:1124需要想那么一点点吧 一个连通块中肯定不需要伸进手不拿的情况 不是一个肯定会需要这种情况 然后注意一点 sum=0的时候 就输出0就可以了 不要再减一了 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 vectored[510]; 9 int a[510][55],vis[510],de[510];10 void dfs(int u)11 {12 int i;13 for(i = 0 ; i < (int)ed[u].size() ; i...
阅读全文
摘要:1742最小的是找联通块数 最大的找环 一个环算一个 其它的数各算一个 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define N 100010 9 int fa[N],vis[N];10 int minz,maxz,de[N],f[N],pp[N];11 void dfs(int u,int v)12 {13 de[u] = v;14 vis[u] = 1;15 f[v] = u;16 int i;17 if(...
阅读全文
摘要:1008没营养的破题 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 typedef struct node 9 { 10 int x,y; 11 }st; 12 int vis[15][15],w[15][15]; 13 int n,o[115],dis[4][2] = {{1,0},{0,1},{-1,0},{0,-1}}; 14 int s[115][8],gg; 15 char ss[115][8]; 16 st p[115]...
阅读全文
摘要:1109二分图的模板题 不过这题题意 我纠结了好久 不知道是不是我对二分图不熟悉的原因这题就是说 有n+m个人参加会议 要在这n+m中进行通话 求最少的连接数 就是每个人都得被连接上 这样求最大匹配就是了 再用总结点数减匹配的 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 vectored[2010]; 9 int n,m,k,vis[2010],link[2010];10 int find(int u)11 {12 int i;13 for...
阅读全文

浙公网安备 33010602011771号