通道在一定的時間開放,處理一下就是最短路了
strtok(char, " ")還是很好用的
strtok()用來將字串分割成乙個個片段。引數s指向欲分割的字串,引數delim則為分割字串中包含的所有字元。當strtok()在引數s的字串中發現引數delim中包涵的分割字元時,則會將該字元改為\0 字元。在第一次呼叫時,strtok()必需給予引數s字串,往後的呼叫則將引數s設定成null。每次呼叫成功則返回指向被分割出片段的指標。
for (i = 0, p = strtok(str, " "); p != null; ++i)
atof(將字串轉換成浮點型數)
atoi(將字串轉換成整型數)
atol(將字串轉換成長整型數)
strtod(將字串轉換成浮點數)
strtol(將字串轉換成長整型數)
strtoul(將字串轉換成無符號長整型數)
sfpa
#include #include #include #include #include #include #include #include #include #include using namespace std;
typedef long long ll;
const double pi = acos(-1.0);
template inline t max(t a, t b)
template inline t min(t a, t b)
const int n = 111;
const int m = 11111;
const ll mod = 1000000007ll;
const int dir[4][2] = ;
const int inf = 0x3f3f3f3f;
struct node
edge[1111];
int cnt, head[55];
int n, m, s, t;
char str[1111];
int dist[55];
bool inq[55];
void add()
edge[cnt].w = a[2];
edge[cnt].v = a[1];
edge[cnt].next = head[a[0]];
a[2] = 0;
for (j = 3, k = 0; j < i; j +=2, ++k)
if (i == j)
edge[cnt].ways = k;
head[a[0]] = cnt++;
edge[cnt] = edge[cnt - 1];
edge[cnt].v = a[0];
edge[cnt].next = head[a[1]];
head[a[1]] = cnt++;
}void solve()}}
}}
}if (dist[t] == inf) printf("*\n");
else printf("%d\n", dist[t]);
}int main()
if (s == t) printf("0");
else solve();
}return 0;
}
POJ 1192最優連通子集
最優連通子集 題目的描述太繁瑣了。其實意思簡單,就是給定若干個點,如果兩個點之間的曼哈頓距離小於1,就連邊。然後就構成一顆樹,然後每個點都 有乙個權值,然後選取若干個點,使得權值和最大,並且點與點之前都連通。簡單的樹形dp,dp i 表示以i點為根的子樹並且選取i點時的最大權值。方程就很好寫,dp ...
poj 1192(簡單樹形dp)
題意 這題描述看似很複雜,其實讀懂後就是乙個相鄰點之間連通問題,水題。解題思路 首先把相鄰的點連線起來建立一棵樹,dp i 0 表示不選擇i節點可以得到的最大價值,dp i 1 表示選擇i節點可以得到的最大價值。狀態方程很簡單,詳見 include include include includeus...
poj 1192 最優連通子集 (樹形dp)
設dp u 0 為以u為根的子樹,子集中沒有u的最大權值,dp u 1 則表示子集中有u。如果子集中沒有u,那麼u的所有兒子中只能選乙個。如果子集中有u,那麼u的所有兒子要麼不選,要麼必須在子集中。狀態轉移方程 dp u 0 max dp u 0 max dp v 0 dp v 1 dp u 1 m...